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

我在我的应用程序中创build多个持久性存储,但我只使用一个持久性存储协调器和托pipe对象模型。 现在我的问题是,当我调用pipe理对象上下文的保存方法,它将用来保存对象的持久存储。 所以我想指定要用来保存对象的持久存储。 从数据库中获取对象时,同样的,我想确保我的提取查询应该在特定的商店上执行,以便我只从该商店获取对象。 任何帮助?

提取不应该是一个问题。 可以修改获取请求,以使用NSFetchRequest上的setAffectedStores:方法search特定的商店。

在创build对象时,可以使用NSManagedObjectContext上的assignObject:toPersisentStore:方法将实体分配给特定的商店。

至于你的问题,我并没有真正意识到一个默认的机制,也许你只需要将受影响的商店设置到你的所有商店:

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

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

您可以使用configuration。

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

假设你想拥有单个托pipe对象上下文,单个托pipe对象模型,单个持久存储协调器,但是有两个持久存储,例如第一个将是SQLite存储,第二个将是内存存储。

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

XCode中的.xcdatamodel文件

您会看到您的托pipe对象模型的可用configuration列表。 托pipe对象模型configuration基本上是一组与string名称关联的实体描述。 要添加configuration,请在打开.xcdatamodel文件的同时使用编辑器 – >添加configuration主菜单项,然后input您喜欢的string名称。 将要存储在第一个SQLite存储中的实体拖到“SQLiteStore”configuration,将其他存储到“InMemoryStore”configuration中。

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

 ... 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”configuration的实体将自动保存到内存中的持久性存储中,“SQLiteStore”也一样。 之后,您可能必须在设备/模拟器上重新安装应用程序。

和一个快速的简历:

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

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

我想你真的想为每个商店使用一个PSC。 这将使你描述的问题消失,我不明白你为什么只想要一个PSC。