我有一个NSManagedObject类的子类,与iPhone中的Core Data一起使用。但是,我有一个临时的“字段”(ivar),我想在该类中添加(但我不想在数据存储中保留它)。试图使用非正式和正式的协议,但他们都给我一个“静态变量”的行为。 (它的行为类似于类变量而不是实例变量)。有什么建议吗?
我的第一次尝试,创建了测试“Dummy-class”,它应该是NSManagedObject的子类,然后我创建了Test-category
@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子类(这是我的实体),但我不认为这是做到这一点的方法。
答案 0 :(得分:4)
您无法在(in)正式协议或类别中添加实例变量。
类别中的任何变量定义都被视为类别之外的文件级别的变量定义,因此它的行为类似于类变量。这是一个令人困惑的行为;我想编译器应该警告它。
标准解决方案是在表示实体的子类中添加保存瞬态数据(不会在数据库中保留)的ivar,如:
@interface MyEntity:NSManagedObject{
NSString*stringHoldingTransientSomething;
}
...
@end
然后将MyEntity
指定为Core Data Editor中的类。请注意,核心数据不会自动将ivars保存在自定义NSManagedObject
子类中;它只保存Core Data模型中指定的属性。因此,您可以在自定义子类中添加任意数量的簿记ivars。