2012-08-14 116 views
1

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

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

我需要节省很多东西,所以节省可能需要很多时间......我需要通知用户有关百分比的进度。

回答

2

不幸的是,核心数据保存并没有一个真正的过程,并且它随设备而异 - 例如,在4S上节省的速度比3GS快得多。

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

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

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 
     }); 
    } 
});