我正在考虑如何使用某些核心数据的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];

如果您不想插入它,则将其丢弃。

关于ios - 使用NSManagedObject子类传输持久性和非持久性d,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15954317/

10-12 02:08