默认情况下,iPhone中的核心数据使用哪个持久性存储

Dar*_*ati 7 iphone core-data persistent-storage ios

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

cas*_*ora 5

获取应该不是问题。可以使用 NSFetchRequest 上的 setAffectedStores: 方法修改获取请求以搜索特定存储。

当你创建一个对象时,你可以使用 NSManagedObjectContext 上的 allocateObject:toPersisentStore: 方法将实体分配给特定的存储。

至于您的问题,据我所知,实际上并没有默认机制,您可能只需将受影响的商店设置为所有商店即可:

[request setAffectedStores:[NSArray arrayWithObjects:firstStore,secondStore,thirdStore, nil]];

确保您在所有正确的地方寻找。


MAN*_*rii 5

您可以使用配置.

[PersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:nil error:]
Run Code Online (Sandbox Code Playgroud)

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

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

XCode中的.xcdatamodel文件

您会看到托管对象模型的可用配置列表.托管对象模型配置基本上是与字符串名称关联的一组实体描述.要添加配置,请在打开.xcdatamodel文件时使用编辑器 - >添加配置主菜单项,然后键入您喜欢的字符串名称.将要存储在第一个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();
} 
...
Run Code Online (Sandbox Code Playgroud)

就是这样,你拖到"InMemoryStore"配置的所有实体都将自动保存到内存持久性存储中,"SQLiteStore"也是如此.也许你必须在那之后在设备/模拟器上重新安装你的应用程序.

快速恢复:

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

有关详细信息,请访问此链接:http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CoreData/Articles/cdBasics.html#//apple_ref/doc/uid/TP40001650-SW4