继续使用 NSManagedObject 类型但迁移出 Core Data
Continue using NSManagedObject types but migrate off Core Data
我正在处理一个使用 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。
对于我要执行 off Core Data 的迁移类型,是否有 proper/recommended 模式?
NSManagedObject
的实例在很大程度上取决于数据模型。您不必使用 Core Data 保存实例,但它们必须有一个数据模型来支持它们,否则它们将无法工作。您的 [[Foo alloc] init]
不起作用,因为 (a) 它没有使用指定的初始值设定项,并且 (b) 它没有支持它的数据模型。
您可以创建不保存的实例。例如,您可以使用 -initWithEntity:insertIntoManagedObjectContext:
创建实例,但上下文参数为 NULL
。除非您插入它,否则它永远不会被保存,但听起来您不会那样做。但是该初始化程序需要一个 NSEntityDescription
,并且您需要从托管对象模型中获取它。 (您也可以在代码中创建它们,但这不会使它变得更容易或消除将核心数据导入您的代码的需要)。
简而言之,您不必将这些对象保存到 Core Data,但如果您仍要进行子类化,则确实需要一些 Core Data 支持 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。
对于我要执行 off Core Data 的迁移类型,是否有 proper/recommended 模式?
NSManagedObject
的实例在很大程度上取决于数据模型。您不必使用 Core Data 保存实例,但它们必须有一个数据模型来支持它们,否则它们将无法工作。您的 [[Foo alloc] init]
不起作用,因为 (a) 它没有使用指定的初始值设定项,并且 (b) 它没有支持它的数据模型。
您可以创建不保存的实例。例如,您可以使用 -initWithEntity:insertIntoManagedObjectContext:
创建实例,但上下文参数为 NULL
。除非您插入它,否则它永远不会被保存,但听起来您不会那样做。但是该初始化程序需要一个 NSEntityDescription
,并且您需要从托管对象模型中获取它。 (您也可以在代码中创建它们,但这不会使它变得更容易或消除将核心数据导入您的代码的需要)。
简而言之,您不必将这些对象保存到 Core Data,但如果您仍要进行子类化,则确实需要一些 Core Data 支持 NSManagedObject
。您不能独立于数据模型使用这些 类。