介绍
我的iOS项目附带一个Core Data持久存储,重量约为160MB,采用SQLite格式.那里有大量的分组信息,用户应该可以在其中标记收藏.为此,我需要(至少部分)数据库具有写入功能.但当然,应用程序包中的持久存储是按设计只读的.
如果您希望商店具有读写功能,则应将其复制到例如应用程序的文档文件夹中.我不想这样做,因为那时应用程序将是两倍大小,而该数据库的主要部分仍然是只读的.那将浪费资源.
NSPersistentStoreCoordinator的多个持久存储
这就是为什么我想到使用两个持久存储.第一个是捆绑中的大一个,第二个可能是文档文件夹中的一个小的,存储与大商店有关系的特殊"最喜欢"实体.
我知道在这方面有可能做到,但我找不到具体细节.如果您还有多个对象模型,是否应该只使用多个商店?一个对象模型可以在两个持久存储上"分布"吗?浏览核心数据编程文档时,我找不到任何关于如何设置它的真正参考.Marcus Zarra的书似乎也没有深入研究这个主题:
可以向NSPersistentStoreCoordinator添加多个NSPersistentStore,这在处理拆分为多个文件的数据时非常有用.但是,在我们的例子中,我们只有一个文件.(Marcus Zarra:"核心数据 - Apple在Mac OS X上保存数据的API"第71页)
问题
谁可以告诉我,我在想什么是可能的Core Data和多个持久存储?你能提供一些关于如何实现这一目标的提示吗?处理该主题的在线/离线资源也非常受欢迎.
问题陈述
当尝试将记录保存到读/写存储(该存储是分配给同一 PersistentStoreCoordinator 的两个 SQLite 存储之一)时,我的 iPhone 应用程序崩溃了。保存记录时的一个明显问题是 PersistentStoreCoordinator 不知道在哪个 Store 中保存数据(只是因为我不知道如何实现这一点)。
首先,我将提供总体情况,以确保我的方法是正确的。然后我将提供实施细节。
背景
这是一个简化的示例,代表了我正在开发的实际应用程序的关键方面。

种子数据

用户输入场景

目前的实施情况
核心数据实施

数据存储和检索

当然,当用户查看选择列表以对属性进行选择时,不应该有任何证据表明这些选择来自两个不同的商店。
持久存储协调器设置
- (NSPersistentStoreCoordinator*)persistentStoreCoordinator {
if (_persistentStoreCoordinator == nil) {
NSArray *bundles = @[[NSBundle bundleForClass:[self class]]];
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[NSManagedObjectModel mergedModelFromBundles:bundles]];
NSError *error;
//--------------------------------------------------
// Set options for the USER DATA Persistent Store.
NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption : @YES,
NSInferMappingModelAutomaticallyOption : @YES};
//--------------------------------------------------
// Add the USER DATA Store to the Persistent Store Coordinator.
NSPersistentStore *persistentStore = [_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType …Run Code Online (Sandbox Code Playgroud) sqlite core-data persistent-storage managedobjectcontext ios7
假设我的应用程序文档目录中有两个SQLite文件.我如何将两者结合在一起并将它们保存为包含两者所有信息的单个文件?我是否真的必须创建两个持久性存储协调器并手动协调两者之间的过程,还是有一些更有效的方法呢?
-灰