2016-02-13 3 views
0

Я получаю следующую ошибку при попытке удалить элемент TableView.Удаление ошибки UITableView Room

Нагрузочное приложение из-за неперехваченное исключением «NSInternalInconsistencyException», причина: «Invalid обновления: недопустимый количества строк в разделе 0. Число строк, содержащихся в существующей секции после обновления (4) должен быть равное числу строк , содержащихся в этом разделе перед обновлением (4), плюс или минус количество строк, вставленных или удаленных из этого раздела (0 вставлено, 1 удалено) и плюс или минус количество строк, перемещенных в или из этот раздел (0 перемещен, 0 перемещен). '

Я использую следующий код:

override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 

if editingStyle == .Delete { 

    let roomToDelete : House = self.frc.objectAtIndexPath(indexPath) as! House 
    moc.deleteObject(roomToDelete) 

    do { 
     try moc.save() 
     } catch { 
     print("Failed to save upon delete") 
     return 
    } 

    tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic) 
    self.tableView.reloadData() 

    } 

} 

Если я оставляю последние две строки кода с после этого я не получаю ошибку, но линия не удаляется, потому что я только удаление данные из Core Data. Если я покину стол и вернусь, линия исчезнет. Я предполагаю, что ошибка связана с тем, что я каким-то образом не связываю удаление строки с количеством строк в секции, поэтому существует несоответствие. Все поиски, которые я сделал, возвращаются с похожим программированием на то, что у меня есть.

+1

Вы установили делегат для FRC и реализовали связанные методы? – pbasdf

ответ

0

Я был в состоянии заставить его работать по -

1) Удаление

tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic) 

из функции фиксации редактирования стиля И

2) Добавление

self.tableView.reloadData() 

к конец функции viewDidLoad

0

Вы должны установить контроллер вида в качестве делегата FRC и использовать методы делегатов для обновления вида таблицы. Поскольку FRC является вашим источником данных, он должен знать об удалении, чтобы обновить счетчик строк.

В методе фиксации вы должны просто удалить объект из контекста. Вы не должны удалять строку из таблицы или перезагружать таблицу (это должно выполняться методами делегата FRC).

Смежные вопросы