将ivars添加到NSManagedObject子类

时间:2012-11-19 10:14:23

标签: objective-c ios core-data nsmanagedobject

当我使用核心数据创建实体然后从中生成NSManagedObject的子类时,我得到以下输出(在.h中):

@class Foo;

@interface Foo : NSManagedObject

@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSSet *otherValues;

@end

但是,在我的.m文件中,我想要使用nameotherValues值。通常我会创建几个ivars,然后根据需要为它们添加属性。这样我就可以轻松地在我的.m文件中访问它们了。

在这种情况下可以接受吗?将ivars添加到.h(nameotherValues)会导致持久性和异常行为中的任何异常行为检索对象?

1 个答案:

答案 0 :(得分:5)

您不使用实例变量来访问Core Data托管对象的属性。

生成的实现文件包含语句

@dynamic name;
@dynamic otherValues;

这意味着Core Data属性的getter / setter函数是动态创建的,例如从托管对象上下文或从底层持久性存储中检索值。

因此,您应始终使用属性来访问属性,例如:

Foo *myFoo = [NSEntityDescription insertNewObjectForEntityForName:@"Foo" inManagedObjectContext:context];
myFoo.name = @"test";

或者,您可以使用键值方法:

[myFoo setValue:@"test" forKey:@"name"];

另请参阅:“核心数据编程指南”中的Modeled Properties

  

核心数据动态生成高效的公共和原始get和   set属性访问器方法...在托管对象子类中,您   可以在接口中声明建模属性的属性   文件,但您不声明实例变量