我想使用我的自定义NSManagedObject就像一个普通的对象(以及它的常规函数)。是否有可能修改类以便能够像普通对象一样初始化它?iPhone - 更改实体类(NSManagedObject),使它们可初始化
[[myManagedObject alloc] init];
感谢
编辑:澄清的问题,将其拧一切,如果我在执行改变@dynamic与@synthesize?
我想使用我的自定义NSManagedObject就像一个普通的对象(以及它的常规函数)。是否有可能修改类以便能够像普通对象一样初始化它?iPhone - 更改实体类(NSManagedObject),使它们可初始化
[[myManagedObject alloc] init];
感谢
编辑:澄清的问题,将其拧一切,如果我在执行改变@dynamic与@synthesize?
托管对象上下文是NSManagedObject的必需属性,因此您无法正确初始化它的实例而无需将其插入到上下文中。它看上下文来理解它的实体,并在其任何属性发生变化时通知上下文。
@dynamic和@synthesize只是编译器指令。只要你自己提供适当的getter和setter,你就可以从@dynamic切换到@synthesize。由于NSManagedObject严重依赖于键值观察功能,因此您必须编写符合KVO标准的访问器。
如果你需要初始化一个NSManagedObject子类,你可以覆盖awakeFromInsert
,它可以让你在创建实例时提供自定义。您也可以在每次使用awakeFromFetch
获取对象时自定义该对象。
我经常在我的一个应用程序中这样做。我的方法是用下列方法初始化对象:
-(id)initWithEntity:(NSEntityDescription *)entity insertIntoManagedObjectContext:(NSManagedObjectContext *)context
传递nil作为上下文。要获取实体描述,您需要访问managedObjectContext。我倾向于在我的应用程序启动时获取实体描述,然后将其存储在我的应用程序委托中的实例变量中。
下面是一个例子:
//inside my "Engine" class
self.tweetEntity = [NSEntityDescription entityForName:@"Tweet" inManagedObjectContext:self.moc];
//later on when I want an NSManagedObject but not in a managed object context
Tweet *tweet = [[[Tweet alloc] initWithEntity:self.engine.tweetEntity insertIntoManagedObjectContext:nil] autorelease];
这允许我使用NSManagedObjects没有将它们存储在数据库中。后来,如果我决定将对象插入到我的数据库中,我可以将它插入到托管对象上下文中:
[self.moc insertObject:tweet];
谢谢......现在看起来更清楚了!我想要做的是在持久存储之外使用这些类(如常规对象);这似乎是不可能的 – ncohen 2010-04-23 17:02:55