ios – 使用NSManagedObject子类传输持久性和非持久性数据

我对如何使用一些核心数据的NSManagedobject子类来处理持久数据和非持久数据有一些想法.

假设您有一个配方应用程序,显示您自己的CoreData配方列表,在同一个应用程序中,您也可以搜索其他用户配方.
这些其他用户配方当然来自API,我们不希望将它们保存到核心数据中.
但我们想要的是我们的配方细节View Controller,无论是给定持久配方还是非持久性配方,它都可以起作用.
我自然认为我们应该在数据周围使用相同的对象包装器,让我们的View Controller对数据的来源视而不见.

问题是NSManagedobject子类不能手动初始化,必须插入上下文.这对我们的其他用户食谱不利.另一方面,对于我们自己的配方,我们需要将这些对象插入到上下文中.

我有几个解决方案,但我真的很想看看你们对这个问题的看法.

您是否认为这是一些实现问题,应该通过将两个数据对象包装到一个对象中来解决?例如,通过覆盖所有getter和setter来处理coredata对象和NSDictionary对象?

或者它是一个体系结构问题,您可以通过嵌套NSManagedContext或使用多个持久性存储(一个在内存中,另一个sqlite中)来解决它?

解决方法

实际上,您可以创建NSManagedobject实例,而无需将它们插入上下文中.只需传递nil作为托管对象上下文参数.做类似的事情:
NSEntityDescription *myRecipeEntity = [NSEntityDescription entityForName:@"MyRecipeEntity" inManagedobjectContext:[self managedobjectContext]];
MyRecipeClass *recipe = [[MyRecipeClass alloc] initWithEntity:myRecipeEntity insertIntoManagedobjectContext:nil]];

现在您有一个不在任何上下文中的配方实例.

如果您以后想要将其添加到上下文中:

[[self managedobjectContext] insertObject:recipe];

如果您不想插入它,只需扔掉即可.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...