我仍然很難理解核心數據如何在後臺線程中工作,即使在閱讀了很多關於它的事情後,尤其是刪除對象。刪除核心數據對象並保存在後臺線程中
舉個例子,如果我想刪除這樣的背景下一個對象:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
NSManagedObjectContext *context = [self managedObjectContext];
if (editingStyle == UITableViewCellEditingStyleDelete)
{
// Delete object from database
[context deleteObject:[self.tests objectAtIndex:indexPath.row]];
NSError *error = nil;
if (![context save:&error]) {
NSLog(@"Can't Delete! %@ %@", error, [error localizedDescription]);
return;
}
[self.tests removeObjectAtIndex:indexPath.row];
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}
這個工作,但是當數據量大,[context save:&error]
需要花費大量的時間,所以我該怎麼辦它在後臺? 看來我不能用另一個上下文工作,否則我得到錯誤an nsmanagedobjectcontext cannot delete objects in other contexts
。 我已經嘗試了數百種不同的東西,但我迷失了... 謝謝!
謝謝!這似乎工作。我只是想知道:是否可以只使用NSPrivateQueueConcurrencyType? – jcr
只要您使用performBlock/perfomBlockAndWait從管理對象中讀取它就沒有問題。 Tableview代碼特別有點尷尬,因爲你必須從performBlockAndWait調用中複製這些值,將它們設置在單元格中。從NSMainQueueConcurrencyType開始(因此您可以在塊中設置單元格屬性),然後轉換爲專用隊列(如果有意義)。 – ImHuntingWabbits