我敢肯定这一定是一个愚蠢的问题,但我已经搜索了这些互联网并找不到答案.很多人谈论使用Generation Gap模式,其中你有一个从模型生成的NSManagedObject子类,然后将其子类化以添加瞬态属性和行为.这样做的好处是,如果您更改持久模型,则可以再次生成基本文件,而不会有覆盖自己代码的危险.
我有一个从NSManagedObject派生的基本CardMO对象.然后我将其子类化为自己的Card对象.
我的问题是,如何创建一个托管的Card对象?
我试过了:
Card* card = [NSEntityDescription insertNewObjectForEntityForName:@"CardMO" inManagedObjectContext:moc];
但是这个对象实际上不是卡片,当然我继续在这个对象上调用Card方法时会有例外.
我尝试用alloc/init创建一个卡(其中init只调用[super init]),然后将它添加到managedObjectContext,如下所示:
[moc insertObject:(CardMO*)card];
这给了我一个神秘的错误"无法在NSManagedObject类'Card'上调用指定的初始值设定项"
我试过通过调用[NSEntityDescription insertNewObjectForEntityForName:@"CardMO"inManagedObjectContext:[AIStoreManager sharedAIStoreManager] .managedObjectContext]而不是[super init]来修改它.在这种情况下,我回来的对象再次是CardMO,我无法在其上调用Card方法.
我该怎么办?
并且(对于奖励积分:-) - 在我通过这个障碍之后,我需要从XML创建我的其他Card对象,然后将它们转换为NSManagedObjects.我正在使用基于Apple的XMLReaderSAX的代码 - 我把这个代码交给了一大块XML,它让我回到了许多Card对象的数组.我以后可以将这些对象添加到我的托管对象上下文中,还是必须进入XMLReaderSAX并更改它创建这些对象的方式?
我在3.0上写了一个iPhone应用程序,但我认为这对于Core Data for 10.5来说是一样的.
抱了它!
在数据模型中,实体的类名必须是派生类最多的类 - 在我的情况下是Card.那么问题是你必须记住在生成任何新文件之前将名称更改为CardMO.
这必须是人们使用发电机的原因.