2

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

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

我需要保存很多东西,所以保存可能需要很多时间......我需要以百分比通知用户进度。

4

2 回答 2

2

不幸的是,Core Data 并没有真正的保存过程,而且它因设备而异——例如,4S 的保存比 3GS 快得多。

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

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

于 2012-08-14T14:28:37.447 回答
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
        });
    }
});
于 2012-08-14T16:35:48.387 回答