У меня есть UITableView, который заполняется NSFetchedResultsController. Когда пользователь перемещает элемент справа у меня есть кнопка Удалить появляющуюся, чтобы он/она может удалить объект, используя следующий подход:Удалить из UITableView с помощью NSFetchedResultsController
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
// Return NO if you do not want the specified item to be editable.
return YES;
}
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
//perform similar delete action as above but for one cell
XMPPUserCoreDataStorageObject *user = [[self fetchedResultsController] objectAtIndexPath:indexPath];
NSLog(@"User delete: %@", [user displayName]);
//delete from fetchController
NSArray *sections = [[self fetchedResultsController] sections];
int userStatus = [[user sectionNum] intValue];
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}
Но когда я делаю, что есть исключение, потому что я не обновляя модель, которая является моим fetchedResultsController. Вопрос в том, как удалить из fetchedController с помощью indexPath, который у меня есть с commitEditingStyle?
я получаю: Нагрузочное приложение из-за неперехваченное исключение «NSInternalInconsistencyException», причина: «Invalid обновления: неверное число строк в разделе 0. Число строк, содержащихся в существующем разделе после обновления (11) должно быть равное количеству строк, содержащихся в этом разделе перед обновлением (11), плюс или минус количество строк, вставленных или удаленных из этого раздела (вставлено 0, 1 удалено) и плюс или минус количество строк, перемещенных в или из этот раздел (0 перемещен, 0 удален). – user1845360
@ user1845360: Вы должны удалить объект, но вы должны * не вызывать * 'deleteRowsAtIndexPaths'. Это делается позже в методах делегатов FRC. –
@MartinR хороший момент, я обновлю свой ответ. –