1

我的项目设计要求我创建两个完全独立的持久存储,其中两个不同RKObjectManagers,两个不同baseURLs

经理 1:将处理 store1.sqlite

经理 2:将处理 store2.sqlite

所以,据我所知,我必须创建:

1) 2 个独立的数据模型:模型 1 和模型 2

2) 2 个独立的托管对象上下文:上下文 1 和上下文 2

3) 1persistentStoreCoordinator

我以前习惯于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]

先感谢您。

ps 在applicationDidFinishLaunchingWithOptions我必须通过简单地删除 sqlite 文件NSFileManager并创建一个新的干净文件来擦除所有 store 2 数据,有人可能会问为什么要保留数据?因为使用内存NSObjects会杀死 iPhone 内存,在我的情况下,有数千条记录可供使用。

4

1 回答 1

1

你不会有一个持久的商店协调员,你会有两个。只需复制您的代码并拥有所有详细信息的 2 个存储区,合理命名它们并像您当前一样通过适当的 managedObjectStore 访问 MOC。唯一稍微复杂的是您如何访问 managedObjectStore,因为您现在不能使用 RestKit 提供的默认存储。您应该使用自己的单例来存储您的上下文并在单例上提供公共方法。

于 2013-06-28T07:07:15.813 回答