2010-11-28 9 views
0

iPhone의 Core Data에 사용되는 NSManagedObject 클래스의 하위 클래스가 있습니다. 그러나 나는 그 클래스에 추가하고자하는 임시 "필드"(ivar)를 가지고있다. (그러나 나는 데이터 저장소에서 그것을 유지하고 싶지 않다.) 비공식적이고 공식적인 프로토콜을 사용하려고했지만 둘 다 나에게 "정적 변수"와 같은 행동을합니다. (이것은 인스턴스 변수가 아닌 클래스 변수처럼 동작합니다). 어떠한 제안? 가정 NSManagedObject의 서브 클래스입니다NSManagedObject 하위 클래스에 ivar 추가

내 첫 번째 시도, 생성 된 테스트 "더미 클래스는"그때 테스트 범주

@interface Test (custom) 
    NSString *_string ; 
    - (void)setString:(NSString *)newString; 
    - (NSString *)string; 
@end 

사람들은 보통 세터와 게터 있습니다를 만들었습니다. 이것은 내가 나 또한 (내 법인 임) NSManagedObject 하위 클래스 엉망 직접하지만 그나마 그 그것을 할 수있는 방법이라고 생각 할 수있는 테스트 클래스

Test *a = [[Test alloc] init]; 
Test *b = [[Test alloc] init]; 
[a setString:@"Test1"]; 
NSLog(@"%@", [a string]);   //This will print out Test1 

[b setString:@"Test2"];   
NSLog(@"%@", [b string]);   //This will print out Test2   
NSLog(@"%@", [a string]);   //Unfortunately, this will also print out Test2 

를 사용하는 방법입니다.

+0

코드 블록을 올바르게 렌더링하려는 노력을 환영합니다. 그러나 더 쉬운 방법이 있습니다 : 먼저 빈 줄을 삽입 한 다음 코드의 각 줄을 4 개 이상의 공백만큼 들여 쓰기하십시오! – Yuji

+0

팁 주셔서 감사합니다. – Rpranata

답변

4

(in) 공식 프로토콜 또는 카테고리에 인스턴스 변수를 추가 할 수 없습니다.

범주 내의 모든 변수 정의는 범주 외부의 파일 수준에서 변수 정의로 처리되므로 클래스 변수처럼 작동합니다. 혼란스러운 행동입니다. 나는 컴파일러가 그것에 대해 경고해야한다고 생각한다. 다음

@interface MyEntity:NSManagedObject{ 
     NSString*stringHoldingTransientSomething; 
} 
     ... 
@end 

와 클래스로 MyEntity을 지정 :

표준 솔루션은 같이 직접 개체를 나타내는 서브 클래스 (데이터베이스에 유지되지 않음) 임시 데이터를 보유하고있는 바르를 추가하는 것입니다 핵심 데이터 편집기에서. 코어 데이터 이 자동으로 사용자 정의 NSManagedObject 서브 클래스에 ivars를 저장하지 않습니다. 핵심 데이터 모델에 지정된 속성 만 저장합니다. 따라서 사용자 정의 서브 클래스에서 원하는만큼 책 보관 ivars를 추가 할 수 있습니다.

+0

공식, 비공식 프로토콜 개념 설명에 감사 드리며, 컴파일러가 개발자에게 경고해야한다는 데 동의합니다. 감사합니다 – Rpranata

+0

하지만 모델을 변경 한 후 nsmanagedobject 하위 클래스를 자동으로 만들면 모든 ivars가 삭제됩니다. 그걸 피할 ​​방법이 있니? – user1258240

+0

mogenerator http://raptureinvenice.com/getting-started-with-mogenerator/를 사용하십시오. – Yuji

관련 문제