继续使用 NSManagedObject 类型但迁移核心数据

我正在处理使用 Core Data 的大量现有代码库。

我有扩展 NSManagedObject 并保留在核心数据中的类型。

我需要完全从 Core Data 迁移(这样做的原因并不重要,但我有充分的理由)。但是,我有一个基本的限制。

  • 我无法将这些类型更改为 NSObject(某些用例必须继续使用 Core Data)。
  • 这些 NSManagedObject 类型在我的业务逻辑中被大量传递。我不想重构该业务逻辑并引入新的/“非托管”类型。

假设我有一个类型为 Foo 的 NSManagedObject。我试过类似的东西:

Foo *foo = [[Foo alloc] init];
foo.name = "beebunny";

foo.name 调用导致崩溃。

name@dynamic 并且具有自定义设置方法,例如:

- (void)setfoo:(Foo *)fooIn
{
    [self setfoo:fooIn];
}

[self setfoo:fooIn]; 调用导致异常(未知选择器)。

如果我正在使用扩展 NSManagedObject 的任何类型,似乎我必须使用 Core Data。

对于我要关闭核心数据的迁移类型,是否有适当/推荐的模式?

h07210416 回答:继续使用 NSManagedObject 类型但迁移核心数据

NSManagedObject 的实例在很大程度上依赖于数据模型。您不必使用 Core Data 保存实例,但它们必须有一个数据模型来备份它们,否则它们将无法工作。您的 [[Foo alloc] init] 不起作用,因为 (a) 它没有使用指定的初始值设定项,并且 (b) 它没有支持它的数据模型。

您可以创建不保存的实例。例如,您可以使用 -initWithEntity:insertIntoManagedObjectContext: 创建实例,但上下文参数为 NULL。除非你插入它,否则它永远不会被保存,但听起来你不会这样做。但是该初始化程序需要一个 NSEntityDescription,您需要从托管对象模型中获取它。 (您也可以在代码中创建它们,但这不会使它变得更容易或消除将核心数据导入您的代码的需要)。

简而言之,您不必将这些对象保存到 Core Data,但如果您仍要继承 NSManagedObject,则确实需要一些 Core Data 支持。您不能独立于数据模型使用这些类。

本文链接:https://www.f2er.com/33321.html

大家都在问