我的项目设计要求我创建两个完全独立的持久性商店,其中两个RKObjectManagers
具有两个不同的baseURLs
:
经理1:将处理store1.sqlite
经理2:将处理store2.sqlite
所以,据我所知,我必须创建:
1)2个独立的数据模型:模型1和模型1。模型2
2)2个独立的托管对象上下文:context 1&背景2
3)1 persistentStoreCoordinator
我以前用来设置RestKit 0.2x
来处理核心数据(1个商店),如下所示:
NSError *error = nil;
NSURL *modelURL1 = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"store1" ofType:@"momd"]];
NSManagedObjectModel *managedObjectModel1 = [[[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL1] mutableCopy];
RKManagedObjectStore *managedObjectStore1 = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel1];
[managedObjectStore1 createPersistentStoreCoordinator];
NSString *storePath = [RKApplicationDataDirectory() stringByAppendingPathComponent:@"Store1.sqlite"];
NSPersistentStore *persistentStore = [managedObjectStore addSQLitePersistentStoreAtPath:storePath fromSeedDatabaseAtPath:nil withConfiguration:nil options:nil error:&error];
if (error) {
NSLog(@"unresolved error %@, %@", error, [error userInfo]);
abort();
}
[managedObjectStore1 createManagedObjectContexts];
manager1.managedObjectStore = managedObjectStore1 ;
managedObjectStore1.managedObjectCache = [[RKInMemoryManagedObjectCache alloc] initWithManagedObjectContext:managedObjectStore1.mainQueueManagedObjectContext];
其中manager1是RKObjectManager
我的问题是:
1)我应该对这段代码进行哪些更改以正确设置2个完全独立的持久存储?
2)如何访问与(例如store1)相关的所需上下文,我通常使用managedObjectStore1.mainQueueManagedObjectContext]
?
提前谢谢。
P.S。在applicationDidFinishLaunchingWithOptions
我必须通过简单地删除带有NSFileManager
的sqlite文件并创建一个新的干净文件来清除所有商店2数据,有人可能会问为什么然后保留数据?因为使用内存中NSObjects
会杀死iPhone内存,在我的情况下,可以使用数千条记录。
答案 0 :(得分:1)
您将没有一个持久性商店协调员,您将拥有两个。只需复制您的代码并拥有2个存储的所有详细信息,明智地命名它们并通过适当的managedObjectStore访问MOC,就像您目前所做的那样。唯一稍微复杂的是你如何访问managedObjectStore,因为你现在不能使用RestKit提供的默认存储。您应该使用自己的单例来存储您的上下文,并在单例上提供公共方法。