我在我的应用程序中创建了多个持久化存储,但我只使用一个持久化存储协调器和托管对象模型。现在我的问题是,当我在托管对象上下文中调用保存方法时,它将使用哪个持久化存储来保存对象。因此,我想指定要用于保存对象的持久化存储。同样,在从数据库中获取对象时,我希望确保我的获取查询应该在特定的存储上执行,以便我只从该存储获取对象。有任何帮助吗?
我在我的应用程序中创建了多个持久化存储,但我只使用一个持久化存储协调器和托管对象模型。现在我的问题是,当我在托管对象上下文中调用保存方法时,它将使用哪个持久化存储来保存对象。因此,我想指定要用于保存对象的持久化存储。同样,在从数据库中获取对象时,我希望确保我的获取查询应该在特定的存储上执行,以便我只从该存储获取对象。有任何帮助吗?
您可以使用配置文件。
[PersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:nil error:]
...
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"。也许之后你需要重新在设备/模拟器上安装应用程序。
简要概述如下:
获取数据不应该是一个问题。可以使用NSFetchRequest上的setAffectedStores:方法,修改fetch请求以搜索特定的存储。
当你创建一个对象时,可以使用NSManagedObjectContext上的assignObject:toPersisentStore:方法将实体分配到特定的存储。
至于你的问题,我不太清楚是否有默认机制,可能需要将受影响的存储设置为所有存储:
[request setAffectedStores:[NSArray arrayWithObjects:firstStore,secondStore,thirdStore, nil]];
确保你正在查找所有正确的位置。
我认为你真的想为每个商店使用一个PSC。这将消除你所描述的问题,我真的看不出为什么你只想要一个PSC。
NSPersistentStoreCoordinator
,一个默认的NSManagedObjectContext
和2个SQLiteNSPersistentStore
。其中一个充当永久存储,另一个充当临时存储。在应用程序中,我填充此临时存储。但是我得到了0个结果。我在MagicalRecord的Github上发布了一个问题。你能看一下吗? - Isuru