gpt4 book ai didi

objective-c - 具有全局持久存储的基于核心数据文档的应用程序

转载 作者:太空狗 更新时间:2023-10-30 03:55:02 24 4
gpt4 key购买 nike

我有一个基于文档的核心数据应用程序,它可以正常工作。我想添加对全局持久存储的支持以保存项目库。

我已经阅读了大部分相关文档,并且明白我应该在托管对象模型中使用配置。我定义了两个配置:“DocumentConfiguration”和“LibraryConfiguration”。文档配置中的实体仅在文档配置中,库配置中的实体仅在库配置中——即没有重叠。

文档然后说“然后在创建协调器时使用此模型”。但我实际上并没有创建自己的持久存储协调器,因为我使用的是默认的 NSPersistentDocument 协调器。

关于如何最好地进行并帮助消除我可能有的任何误解的几个问题:

一个。我是否会在 NSPersistentDocument 中获取 NSPersistentStoreCoordinator,然后按照以下方式向其添加新的持久存储:

NSPersistentStoreCoordinator * coordinator = [[myDocument managedObjectContext] persistentStoreCoordinator];
[coordinator addPersistentStoreWithType:NSXMLStoreType
configuration:@"LibraryConfiguration"
URL:url
options:nil
error:&error];

我认为这可能是个问题,因为我没有在 NSPersistentDocument 的持久存储协调器中提供其他配置定义(“DocumentConfiguration”),因为我使用的是 NSPersistentDocument 提供的默认值。我猜它可能会在保存文档时使用 nil。如果是这样,这会是一个问题吗?即,如果没有为所有持久存储(在本例中为两个)定义相同的配置,协调器将如何知道哪个持久存储要保存具有给定配置定义的实体?在创建/保存 NSPersistentDocument 的持久存储之前,我是否能够设置它的配置(到“Doc​​umentConfiguration”)?来自 NSPersistentDocument 文档:

Saving a new document adds a store of the default type with the chosen URL and invokes save: on the context. For an existing document, a save just invokes save: on the context.

B.创建我自己的 NSPersistentStoreCoordinator 和 NSManagedObjectContext 实例,添加两个定义了配置的持久存储,然后让 NSPersistentDocument 使用这些 NSPersistentStoreCoordinator 和 NSManagedObjectContext 实例,并释放旧的实例会更好吗?如果是这样,我将如何为 addPersistentStoreWithType:... 方法指定 NSPersistentDocument 的 url?似乎只有在保存无标题文档后才知道此 URL。 (对此进行测试,在第一次保存文档之前,似乎没有任何临时持久存储(通过持久存储协调器上的方法 persistentStores)。

C.或者单独留下 NSPersistentDocument 并创建我自己的 NSPersistentStoreCoordinator 实例,我专门用于持久库存储和托管库对象模型会更好吗?文档说 NSPersistentStoreCoordinator 的多个实例应该在多线程核心数据应用程序中使用,但我不需要多线程核心数据支持。是否需要两个 NSPersistentStoreCoordinator 实例——一个用于库,一个用于文档(直觉告诉我们这不是必需的,而且可能不是正确的方法)?

有什么建议吗?

最佳答案

我使用的效果很好的解决方案是基于上面的C)。我单独留下 NSPersistentDocument 和它的持久存储协调器,而是创建我自己的 NSPersistentStoreCoordinator 实例,专门用于持久库存储(全局存储)。

我可以将商店的配置设置为自定义值,以防以后我希望有多个商店与此持久性商店协调器相关联(例如,“LibraryConfiguration”)。由于库存储由不同于 NSPersistentDocument 的持久存储协调器的持久存储协调器管理,因此我不需要担心为 NSPersistentDocument 的持久存储指定配置。

关于objective-c - 具有全局持久存储的基于核心数据文档的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4213153/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com