Iphone 有多个NSPersistentStoreCoordinator有意义吗?
我不熟悉核心数据,我正在努力确保我已经正确设置了数据模型及其用法 我的应用程序中基本上有两种文件类型。。。一个包含设置类型的数据,另一个包含用户将使用的数据集(有点像文档,尽管我可以想象用户同时处理10秒甚至100秒这些文件) 我一直在阅读有关核心数据的书籍,我记得我读过这样一本书:一个应用程序通常有一个Iphone 有多个NSPersistentStoreCoordinator有意义吗?,iphone,ios,core-data,Iphone,Ios,Core Data,我不熟悉核心数据,我正在努力确保我已经正确设置了数据模型及其用法 我的应用程序中基本上有两种文件类型。。。一个包含设置类型的数据,另一个包含用户将使用的数据集(有点像文档,尽管我可以想象用户同时处理10秒甚至100秒这些文件) 我一直在阅读有关核心数据的书籍,我记得我读过这样一本书:一个应用程序通常有一个NSPersistentStoreCoordinator、一个NSManagedObjectContext和一个NSManagedObjectModel 目前,我有一个单一的托管对象模型,其中包
NSPersistentStoreCoordinator
、一个NSManagedObjectContext
和一个NSManagedObjectModel
目前,我有一个单一的托管对象模型,其中包含各种文件类型的配置。我还计划使用一个nsPersistentStoreCoordinator
/NSManagedObjectContexts
,当我创建新的核心数据对象时,我会确保每个对象都添加到正确的持久存储中
但是,我看到了一些示例,其中每个文件都有自己的NSPersistentStoreCoordinator
和NSManagedObjectContext
在单线程应用程序中使用多个nsPersistentStoreCoordinator
和NSManagedObjectContexts
是否有优点和缺点
起初,我一直希望在用户剪切粘贴类型编辑期间能够将对象从一个持久性存储移动到另一个持久性存储,但这两种方式似乎都不可能
非常感谢您的建议
编辑
这里有一些关于什么让我困惑的更多信息。当我阅读有关NSPersistentStoreCoordinator的文档时,它说:
协调员的目的是介绍
托管对象的外观
使一组
持久存储显示为
聚合存储
就我而言,这不是我想要的。我希望我的文档被视为单独的文档,并且我不希望查询相互混淆
此外,由于只有一个持久存储协调器和多个持久存储,如果在创建时忘记将实体分配给正确的存储,我会发现自己有bug,因为实体在创建时会被任意分配给有效的存储。我不确定指向不同存储中对象的关系会发生什么情况(可能是断言失败?)
对我来说,似乎每个存储都有一个上下文/持久存储协调器,这样就不太容易出现bug,并允许我将每个文档的数据彼此隔离
一个持久性存储似乎给我带来的唯一好处是,我可以同时对所有存储执行一个保存操作,这将是更好的选择。对于多个上下文/存储协调员,我需要执行单独的保存操作
如果您使用OSX NSPersistentDocument类,它似乎会对每个文档强制一个单独的上下文/存储协调器
无论如何,从我所有的研究来看,单独的商店协调员/上下文似乎对我的应用程序更有效,但我之所以发布这篇文章,是因为我对核心数据不熟悉,而且这种方法似乎与推荐的流程背道而驰,我担心我遗漏了一些会再次困扰我的问题
更多想法/信息
当我更多地思考这个问题,并从其他人那里读到更多的反馈时(谢谢大家!!!),我现在的想法如下
对于我自己来说,这两种方法之间似乎没有太大的区别,我目前相信我可以通过任何一种方式使它很好地工作
对于单个商店协调员,我需要确保新创建的实体连接到正确的商店(这不是什么大问题)。对于多个商店协调员,我需要确保将新创建的实体添加到正确的上下文中(其中我将有许多实体)。按照我的代码结构,这两种方法对我来说都应该相对容易
我个人想一次搜索一家商店。如果我有多个商店协调员,这是自动的。如果我只有一个存储协调器,我需要确保约束提取请求。(不管怎样,都不是什么大问题)
store coordinator的文档表明,它的优势在于将多个商店显示为一个。对于我的应用程序,我不需要也不想这样做,因此这对我来说不是一个真正的考虑因素(尽管如果我想在将来添加跨商店搜索功能,最好将所有内容都保存在一个商店协调员中)
对我来说,以上任何一个理由都不是很好的论据,如果它们是唯一的论据,我可能会尝试以更传统的方式做事,并坚持使用单一的门店协调员
然而,最后一个原因(也是我最初发布此问题的主要原因)是我计划利用iOS 5中的一些功能,这些功能似乎需要多个商店协调员。我希望能够弱链接我的应用程序,使其向后兼容,因此,让我的iOS 4代码与iOS 5代码非常相似似乎更可取
我越想这一点,在支持多个操作系统版本的情况下,我可能仍然可以用正确的抽象实现任何一种方式
谢谢大家的反馈!我正在慢慢掌握核心数据的诀窍,这在很大程度上是一次很棒的体验,尽管它也让我感到头疼 通常一个应用程序将只使用一个PersistentStoreCoordinator,并在应用程序委托中初始化
有关更多详细信息和说明,请查看上的Apple文档。我不认为在应用程序中有多个NSPersistentStoreCoordinator实例存在任何真正的技术限制,只要它们都指向一个唯一的位置