我想知道是否可以获得有关NSManagedObjectContext保存进度的信息。核心数据保存进度
if (![self.context save:&error])
{
NSLog(@"Unresolved error %@", error);
[self.context rollback];
return NO;
}
我需要节省很多东西,所以节省可能需要很多时间......我需要通知用户有关百分比的进度。
我想知道是否可以获得有关NSManagedObjectContext保存进度的信息。核心数据保存进度
if (![self.context save:&error])
{
NSLog(@"Unresolved error %@", error);
[self.context rollback];
return NO;
}
我需要节省很多东西,所以节省可能需要很多时间......我需要通知用户有关百分比的进度。
不幸的是,核心数据保存并没有一个真正的过程,并且它随设备而异 - 例如,在4S上节省的速度比3GS快得多。
你可以做的是做几次保存。我为一个项目做了这个。我循环了大量的XML,每循环20次,我都会保存上下文并更新进度条。这使得整个解析+保存过程看起来更快一些。它实际上也可能有助于加快速度,因为一次保存一小块数据对于我来说比保存所有上下文更改更快。我最终在我的循环中输入了17次魔术数字,这对我来说是最快的解析时间,所以你可以稍微玩一下数字。
您也可以只显示活动视图(微调),这是一种不确定的方式或在保存过程中向用户提供视觉反馈。
该方法最简单的方法是只对小块进行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
});
}
});