我正在使用父/子併發模式導入大數據塊。導入是在後臺執行而不會阻塞主線程,如下所示:取消NSManagedObjectContext performBlock
NSManagedObjectContext *temporaryContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
temporaryContext.parentContext = mainMOC;
[temporaryContext performBlock:^{
// import data …
// push to parent
NSError *error;
if (![temporaryContext save:&error]) {
// handle error
}
// save parent to disk asynchronously
[mainMOC performBlock:^{
NSError *error;
if (![mainMOC save:&error]) {
// handle error
}
}];
}];
一切正常,但如果我需要取消數據導入?有什麼方法可以取消performBlock?
對不起 - 這是錯誤的窗扇...一個開啓,一旦開始無法取消,如果它不執行取消自己。 NSOperations有一個取消方法,但只設置操作的狀態。它必須被編程來檢查狀態 –
是的,在我保存後臺上下文之前,我檢查操作是否被取消。如果它被取消,我不保存上下文。 – sash