使用RestKit 0.2x创建两个单独的持久性存储

时间:2013-06-28 02:40:20

标签: iphone objective-c cocoa-touch restkit-0.20

我的项目设计要求我创建两个完全独立的持久性商店,其中两个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内存,在我的情况下,可以使用数千条记录。

1 个答案:

答案 0 :(得分:1)

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