我想知道是否可以獲得有關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
});
}
});