Мне все еще трудно понять, как основные данные работают в фоновом потоке даже после того, как прочитали много вещей об этом, особенно для удаления объектов.Удалить основной объект данных и сохранить в фоновом потоке
В качестве примера, если я хочу, чтобы удалить объект из контекста, как это:
- (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
до тех пор, пока вы используете executeBlock/perfomBlockAndWait для чтения из управляемых объектов, это нормально. Экземпляр табличного вида становится немного неудобным, потому что вы должны скопировать значения из вызова executeBlockAndWait, чтобы установить их в ячейке. Начните с NSMainQueueConcurrencyType (чтобы вы могли установить свойства ячейки в блоке), а затем переходите к частной очереди, если это имеет смысл. – ImHuntingWabbits