乘法 MOC 的 REST 工具包持久性/性能问题



这是我第一次使用新版本的RestKit和多个MOC,所以这个让我有点难倒。我使用的是 RestKit 0.20-pre5,并且正在通过 RestKit 操作以及在整个应用程序中手动添加托管对象。

RestKits提供了两个MOC来管理性能:mainQueue和PersistantStore Object上下文。通过检查 RestKits 代码,所有新的托管对象都保存到 mainQueue MOC 中(基于 RKObjectManager 第 433 行和各种指针地址的检查)。由 RestKit 创建的对象可以很好地持久化(当然是在调用保存之后),但是每当我在同一 mainQueue MOC 中创建自己的托管对象并保存它时,当我重新启动应用程序时,它们都不会持久化。(我经常保存相关的MOC)

这就是持久存储的用武之地。每当我将持久存储与主队列 MOC 一起保存时,数据都会持久保存。我想这与 RKManagedObjectStore 合并更改有关,每当我在持久存储 MOC 上调用保存(通过通知)所以......一切都很好吧?

问题是每当我保存两个上下文时,都会有一个明显的延迟,至少持续 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只是一个指向RestKitsmainQueueObjectContext的宏)。删除持久上下文保存可以消除滞后,但当然不会保留数据。

任何人的帮助(尤其是布莱克·沃特斯;)将不胜感激!

干杯

阿隆

我相信答案是使用RKAdditions类别添加到NSManagedObjectContext的saveToPersistentStore:方法。

这是从这里和这里获取的。

使用它时还有问题吗?

最新更新