我确信这一定是一个愚蠢的问题,但我已经搜索了这些互联网并找不到答案。很多人谈论使用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应用程序,但我认为这对于10.5的Core Data来说是相同的。
答案 0 :(得分:8)
答案 1 :(得分:0)
为什么不使用NSCoding?然后,您可以支持XML或JSON或任何其他方法来描述应用程序之外的对象。