2012-08-14 102 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 
     }); 
    } 
});