核心数据保存进度

时间:2012-08-14 14:21:44

标签: ios core-data

我想知道是否可以获得有关保存NSManagedObjectContext进度的信息。

if (![self.context save:&error]) 
{
    NSLog(@"Unresolved error %@", error);
    [self.context rollback];
    return NO;
}

我需要保存很多东西,所以节省的时间可能会花费很多时间......我需要告知用户百分比的进展情况。

2 个答案:

答案 0 :(得分:2)

不幸的是,没有真正的Core Data保存流程,因设备而异 - 例如4S上的保存比3GS快得多。

您可以做的是做几次保存。我为一个项目做了这个。我循环了很多XML,每20个循环我会保存上下文并更新进度条。这使得整个解析+保存过程在视觉上看起来更快一些。它实际上也可以帮助加快速度,因为一次保存一小块数据对我来说比在最后保存对上下文的所有更改更快。在我的循环中,我最终获得了17次保存,这对我来说是最快的解析时间,所以你可以稍微使用这个数字。

您还可以只显示活动视图(微调器),这是一种不确定的方式,或者在保存过程中为用户提供视觉反馈。

答案 1 :(得分:1)

最简单的方法是在小块中更改MOC,保存每个小变化。但是,为了获得真正的百分比,你必须首先知道工作总量......或者做出好的猜测并在你去的时候更新总数。

无论如何,你可以这样做......

dispatch_async(some_queue, ^{
    while (workToDo) {
        getSomeWorkToDo();
        doTheCurrentPieceOfWork();
        // Save current piece of work practicing Safe Core Data
        [managedObjectContext performBlock:^{
            if (![managedObjectContext save:&error]) {
                // Handle error
            }
        }];
        computePercentageComplete();
        dispatch_async(dispatch_get_main_queue(), ^{
            // Update the control with the new percent complete
        });
    }
});