gpt4 book ai didi

cocoa - CoreData - 如何创建 NSManagedObject 子类的子类(世代间隙模式)

转载 作者:行者123 更新时间:2023-12-03 16:07:33 26 4
gpt4 key购买 nike

我确信这一定是一个愚蠢的问题,但我已经搜索了互联网但找不到答案。很多人谈论使用 Generation Gap 模式,在该模式中,您有一个从模型生成的 NSManagedObject 子类,然后对其进行子类化以添加 transient 属性和行为。这样做的好处是,如果您更改持久模型,您可以再次生成基本文件,而不会出现覆盖您自己的代码的危险。

我有一个从 NSManagedObject 派生的基本 CardMO 对象。然后我将其子类化以创建我自己的 Card 对象。

我的问题是,如何创建托管的 Card 对象?

我尝试过:

  Card* card = [NSEntityDescription insertNewObjectForEntityForName:@"CardMO" inManagedObjectContext:moc];

但是这个对象并不是真正的 Card,当然当我继续调用这个对象上的 Card 方法时会出现异常。

我尝试使用 alloc/init 创建一个 Card(其中 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 的代码 - 我将此代码交给了一 block XML,它返回了一个包含许多 Card 对象的数组。我可以稍后将这些对象添加到我的托管对象上下文中,还是必须进入 XMLReaderSAX 并更改它创建这些对象的方式?

我正在 3.0 上编写一个 iPhone 应用程序,但我认为这对于 10.5 版的 Core Data 来说也是一样的。

最佳答案

成功了!

在数据模型中,实体的类名必须是最派生类的类名 - 在我的例子中是 Card。那么麻烦的是,您必须记住在生成任何新文件之前将名称更改为 CardMO。

这一定是人们使用mogenerator的原因.

关于cocoa - CoreData - 如何创建 NSManagedObject 子类的子类(世代间隙模式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/938617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com