当前位置:  开发笔记 > Android > 正文

CoreData - 如何创建NSManagedObject的子类的子类(Generation Gap模式)

如何解决《CoreData-如何创建NSManagedObject的子类的子类(GenerationGap模式)》经验,为你挑选了1个好方法。

我敢肯定这一定是一个愚蠢的问题,但我已经搜索了这些互联网并找不到答案.很多人谈论使用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来说是一样的.



1> Jane Sales..:

抱了它!

在数据模型中,实体的类名必须是派生类最多的类 - 在我的情况下是Card.那么问题是你必须记住在生成任何新文件之前将名称更改为CardMO.

这必须是人们使用发电机的原因.

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有