这是我第一次使用新版本的 RestKit 和多个 MOC,所以这让我有点难过。我正在使用 RestKit 0.20-pre5 并通过 RestKit 操作以及在整个应用程序中手动添加托管对象。
RestKits 提供了两个 MOC 来管理性能:mainQueue 和 PersistantStore 对象上下文。通过检查 RestKits 代码,所有新的托管对象都保存到 mainQueue MOC(基于 RKObjectManager 行 433 和各种指针地址的检查)。RestKit 创建的对象可以很好地持久化(当然是在调用 save 之后),但是每当我在同一个 mainQueue MOC 中创建自己的 ManagedObjects 并保存它时,当我重新启动应用程序时它们不会持久化。(我经常保存相关的 MOC)
这就是持久存储的用武之地。每当我将持久存储与 mainQueue MOC 一起保存时,数据都会持久存在。我想这与 RKManagedObjectStore 合并更改有关,每当我在persistantStoreMOC 上调用 save 时(通过通知)所以......一切都好吗?
问题是,每当我保存两个上下文时,都会有一个持续至少 1 秒的明显滞后(它最多可以变化 3 秒!)。这种滞后似乎增加了我创建的更多 NSManagedObjects。我已经运行了仪器并且没有内存问题。我一定是错误地使用了核心数据的 RestKits 实现。
作为记录,我使用以下方法保存:
- (void)saveContext
{
__block BOOL _blockSuccess;
__block NSError *_blockError;
NSManagedObjectContext *persistantContext = [[[RKObjectManager sharedManager] managedObjectStore] persistentStoreManagedObjectContext];
[globalManagedObjectContext performBlockAndWait:^{
_blockSuccess = [globalManagedObjectContext save:&_blockError];
}];
if (! _blockSuccess) NSLog(@"Failed to save context: %@", _blockError);
[persistantContext performBlock:^{
_blockSuccess = [persistantContext save:&_blockError];
if (! _blockSuccess) NSLog(@"Failed to save context: %@", _blockError);
}];
}
每当我们想要保存应用程序的状态时,都会从单例对象中调用它。(globalManagedObjectContext 只是一个指向 RestKits mainQueueObjectContext 的宏)。删除 persistantContext 保存会消除滞后,但当然不会保留数据。
任何人的帮助(尤其是布莱克沃特斯;)将不胜感激!
干杯,
阿隆