Я использую шаблон параллелизма parent/child для импорта больших блоков данных. Импорт выполняется в фоновом режиме, не блокируя основной поток, как это:Отмена 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
}
}];
}];
Все прекрасно работает, но что, если мне нужно отменить импорт данных? Есть ли способ отменить executeBlock?
извините - это неправильная створка ... nsoperation, после запуска не может быть отменена, если она не реализована, чтобы отменить себя. NSOperations имеет метод отмены, но только устанавливает состояние операции. Он должен быть запрограммирован для проверки состояния –
yep, прежде чем я сохраню контекст фона, я проверяю, была ли операция отменена. Если он был отменен, я не сохраняю контекст. – sash