继续使用 NSManagedObject 类型但迁移出 Core Data

Continue using NSManagedObject types but migrate off Core Data

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

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

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

假设我有一些 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。

对于我要执行 off Core Data 的迁移类型,是否有 proper/recommended 模式?

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

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

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