我对如何使用一些核心数据的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];
如果您不想插入它,只需扔掉即可.