使用 RestKit 0.2x 创建两个独立的持久存储
Posted
技术标签:
【中文标题】使用 RestKit 0.2x 创建两个独立的持久存储【英文标题】:creating two separate persistent stores with RestKit 0.2x 【发布时间】:2013-06-28 02:40:19 【问题描述】:我的项目设计要求我使用两个不同的RKObjectManagers
和两个不同的baseURLs
创建两个完全独立的持久存储:
manager 1 : 将处理 store1.sqlite
经理2:将处理store2.sqlite
所以,据我所知,我必须创造:
1) 2 个独立的数据模型:模型 1 和模型 2
2) 2 个独立的托管对象上下文:上下文 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]
?
提前谢谢你。
附言在applicationDidFinishLaunchingWithOptions
我必须通过简单地删除带有NSFileManager
的sqlite 文件并创建一个新的干净文件来擦除所有store 2 数据,有人可能会问为什么还要保留数据?因为使用内存中的 NSObjects
会杀死 iPhone 内存,在我的情况下,有数千条记录可供使用。
【问题讨论】:
为什么需要两个完全独立的 RestKit/CoreData 堆栈?只有两个持久存储还不够吗? 【参考方案1】:你不会有一个持久的商店协调员,你会有两个。只需复制您的代码并拥有所有详细信息的 2 个存储区,合理命名它们并像您当前一样通过适当的 managedObjectStore 访问 MOC。唯一稍微复杂的是您如何访问 managedObjectStore,因为您现在不能使用 RestKit 提供的默认存储。您应该使用自己的单例来存储您的上下文并在单例上提供公共方法。
【讨论】:
是否也可以将 managedObjectStore 作为 AppDelegate 的属性,以便我可以在整个应用程序中访问它?据我所知,协调器在持久存储之间进行协调是不合理的。 您可以使用应用程序委托,但这不是它的用途。很多人这样做,但这是不好的做法。您必须有 2 个不同的协调员,因为您有 2 个不同的代码数据模型。以上是关于使用 RestKit 0.2x 创建两个独立的持久存储的主要内容,如果未能解决你的问题,请参考以下文章
RestKit 0.2x 同时 RKManagedObjectRequestOperation
RestKit 0.2 映射 Core Data <--> JSON 与一对多关系