我有一个按原样工作的基于文档的核心数据应用程序。我想添加对全局持久存储的支持以保存项目库。
我已经阅读了大部分相关文档,并且了解我应该在托管对象模型中使用配置。我定义了两个配置:“DocumentConfiguration”和“LibraryConfiguration”。文档配置中的实体仅在文档配置中,而库配置中的实体仅在库配置中——即没有重叠。
然后文档说“然后在创建协调器时使用此模型”。但我实际上并没有创建自己的持久存储协调器,因为我使用的是默认的 NSPersistentDocument 协调器。
关于如何最好地进行并帮助消除我可能存在的任何误解的几个问题:
A. 我是否会在 NSPersistentDocument 中获取 NSPersistentStoreCoordinator,然后按照以下方式向其中添加一个新的持久存储:
NSPersistentStoreCoordinator * coordinator = [[myDocument managedObjectContext] persistentStoreCoordinator];
[coordinator addPersistentStoreWithType:NSXMLStoreType
configuration:@"LibraryConfiguration"
URL:url
options:nil
error:&error];
我认为这可能是一个问题,因为我没有在 NSPersistentDocument 的持久存储协调器中提供其他配置定义(“DocumentConfiguration”),因为我使用的是 NSPersistentDocument 提供的默认值。我猜想保存文档时它可能会使用 nil 。如果是这样,这会是一个问题吗?即,如果没有为所有持久存储(在本例中为两个)定义相同的配置,协调器如何知道使用给定配置定义保存实体的哪个持久存储?我可以在创建/保存 NSPersistentDocument 的持久存储之前设置它的配置(到“DocumentConfiguration”)吗?来自 NSPersistentDocument 文档:
保存一个新文档会添加一个带有所选 URL 的默认类型的存储,并在上下文中调用 save:。对于现有文档,保存只是在上下文中调用 save:。
B. 创建我自己的 NSPersistentStoreCoordinator 和 NSManagedObjectContext 实例,添加定义配置的两个持久存储,然后让 NSPersistentDocument 使用这些 NSPersistentStoreCoordinator 和 NSManagedObjectContext 实例,并释放旧的实例会更好吗?如果是这样,我将如何为 addPersistentStoreWithType:... 方法指定 NSPersistentDocument 的 url?似乎只有在保存无标题文档后才能知道此 URL。(对此进行测试,在第一次保存文档之前,似乎没有任何临时持久存储(通过持久存储协调器上的方法 persistentStores)。
C. 还是不理会 NSPersistentDocument 并创建我自己的 NSPersistentStoreCoordinator 实例,该实例专门用于持久库存储和托管库对象模型?文档说 NSPersistentStoreCoordinator 的多个实例应该在多线程核心数据应用程序中使用,但我不需要多线程核心数据支持。是否需要有两个 NSPersistentStoreCoordinator 实例——一个用于库,一个用于文档(直觉说这不是必需的,而且可能不是正确的方法)?
有什么建议么?