iphone - iPhone 中的核心数据默认使用哪个持久存储

标签 iphone ios core-data persistent-storage

我正在我的应用程序中创建多个持久存储,但我只使用一个持久存储协调器和托管对象模型。现在我的问题是,当我在托管对象上下文上调用 save 方法时,它将使用哪个持久存储来保存对象。所以我想指定用于保存对象的持久存储。同样从数据库中获取对象时,我想确保我的获取查询应该在特定存储上执行,以便我只从该存储中获取对象。有帮助吗?

最佳答案

您可以使用配置。

[PersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:nil error:]

假设您希望拥有单个托管对象上下文、单个托管对象模型、单个持久存储协调器和两个持久存储,例如,第一个将是 SQLite 存储,第二个将是内存存储。

对于此设置,您创建两个配置,用于 SQLite 存储的“SQLiteStore”和用于内存存储的“InMemoryStore”。在 XCode 中(打开您的 .xcdatamodel 文件):

.xcdatamodel file in XCode

您会看到托管对象模型的可用配置列表。托管对象模型配置基本上是一组与字符串名称关联的实体描述。要添加配置,请在打开 .xcdatamodel 文件时使用 Editor -> Add Configuration 主菜单项,然后键入您喜欢的字符串名称。将要存储在第一个 SQLite 存储中的实体拖动到“SQLiteStore”配置,将其他实体拖动到“InMemoryStore”配置。

好的,就是这样,现在是时候更新您的代码了。转到范围,您可以在其中创建持久存储协调器并向其添加持久存储。唯一的变化是为它们指定配置:

...
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:yourManagedObjectModel];
NSURL storeURL = … // your store url
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:@"SQLiteStore" URL:storeURL options:nil error:&error])
{
    NSLog(@"[Core Data error] Unresolved error %@, %@", error, [error userInfo]);
    abort();
}    

if (![__persistentStoreCoordinator addPersistentStoreWithType:NSInMemoryStoreType configuration:@"InMemoryStore" URL:nil options:nil error:&error])
{
    NSLog(@"[Core Data error] Unresolved error %@, %@", error, [error userInfo]);
    abort();
} 
...

现在就是这样,您拖到“InMemoryStore”配置的所有实体都将自动保存到内存中持久存储,“SQLiteStore”也是如此。之后您可能需要在设备/模拟器上重新安装您的应用。

还有一份快速的简历:

  1. 在托管对象模型编辑器(.xcdatamodel 文件)中创建配置;
  2. 在代码中将几个持久存储添加到持久存储协调器,提供适当的配置名称。

查看此链接了解更多信息:http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CoreData/Articles/cdBasics.html#//apple_ref/doc/uid/TP40001650-SW4

关于iphone - iPhone 中的核心数据默认使用哪个持久存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6913156/

相关文章:

ios - iOS 中每天在后台运行一个函数

ios - 从 NSArray 中检索对象并将每个值设置为单独的 NSString

ios - 如何将两个 SKTexture 合并为一个

ios - 将 NSManagedObjectContext 嵌入导航 Controller 时传递给 TableView

iphone - 使用 for 循环将对象添加到字典

iphone - 如何在不调用选择器的情况下分离线程,或者至少进行变通?

ios - 如何使用 Asterisk iOS 进行 PJSIP 电话 session (在电话 session 中添加新成员)?

ios - 如何对基于 View 的表格 View 进行排序

NSManagedObject 的 Date 与 NSDate 的 Xcode 9 构建问题

iphone - 使用适用于 iOS 的新 GoogleMaps SDK 找不到文件