2010-11-28 4 views
0

У меня есть подкласс класса NSManagedObject, который используется с Core Data в iPhone. Однако у меня есть временное «поле» (ivar), которое я хочу добавить в этот класс (но я не хочу его хранить в хранилище данных). Пытался использовать неофициальный и формальный протокол, но оба они дают мне «статическую переменную», как поведение. (Он ведет себя как переменная класса, а не переменная экземпляра). Любое предложение?Добавление ivar в подкласс NSManagedObject

Моя первая попытка, созданный тест «пустышки-класс», который, предположительно, подкласс NSManagedObject, то я создал тест-категорию

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

Это обычный и присваивателя. Это путь я использую Test класса

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 

Я мог бы также связываться с подклассом NSManagedObject (который является моим Entity) непосредственно, но я не думаю, что это способ сделать это.

+0

приветствуем ваши усилия по правильному отображению блоков кодов; но есть более простой способ: сначала вставьте пустую строку, а затем просто отложите каждую строку кода на четыре или более пробелов! – Yuji 2010-11-28 13:58:38

+0

Спасибо за советы – Rpranata 2010-11-28 20:09:54

ответ

4

Вы не можете добавить переменную экземпляра в формальный протокол (в) или в категорию.

Любое определение переменной внутри категории рассматривается как определение переменной на уровне файла вне категории, поэтому оно ведет себя как переменная класса. Это путаное поведение; Я думаю, компилятор должен предупредить об этом.

Стандартное решение заключается в добавлении Ивар который содержит переходные данные (которые не упорствовать в базе данных) в подклассе, представляющий объект непосредственно, как в:

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

, а затем указать MyEntity как класс в редакторе основных данных. Обратите внимание, что Core Data не автоматически сохраняет ivars в вашем обычном NSManagedObject подклассе; он сохраняет только свойства, указанные в модели Core Data. Таким образом, вы можете добавить столько же бухгалтеров, сколько захотите, в свой собственный подкласс.

Смежные вопросы