Для любого, имеющего ту же проблему, вот решение:
в вашем:
func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) {
Убедитесь, что дело Обновление до дела вставки ... так что вместо этого:
func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) {
switch type {
case .Insert:
self.tableView.insertRowsAtIndexPaths([newIndexPath!], withRowAnimation: UITableViewRowAnimation.Fade);
case .Move:
if(!indexPath!.isEqual(newIndexPath!)) {
self.tableView.moveRowAtIndexPath(indexPath!, toIndexPath: newIndexPath!);
}
case .Update:
let cell = self.tableView.cellForRowAtIndexPath(indexPath!) as! UITableViewCell;
self.configureCell(cell, atIndexPath: indexPath!);
self.tableView.reloadRowsAtIndexPaths([indexPath!], withRowAnimation: UITableViewRowAnimation.Fade);
case .Delete:
self.tableView.deleteRowsAtIndexPaths([indexPath!], withRowAnimation: UITableViewRowAnimation.Fade)
}
}
вы должны иметь это:
func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) {
switch type {
case .Update:
let cell = self.tableView.cellForRowAtIndexPath(indexPath!) as! UITableViewCell;
self.configureCell(cell, atIndexPath: indexPath!);
self.tableView.reloadRowsAtIndexPaths([indexPath!], withRowAnimation: UITableViewRowAnimation.Fade);
case .Insert:
self.tableView.insertRowsAtIndexPaths([newIndexPath!], withRowAnimation: UITableViewRowAnimation.Fade);
case .Move:
if(!indexPath!.isEqual(newIndexPath!)) {
self.tableView.moveRowAtIndexPath(indexPath!, toIndexPath: newIndexPath!);
}
case .Delete:
self.tableView.deleteRowsAtIndexPaths([indexPath!], withRowAnimation: UITableViewRowAnimation.Fade)
}
}
Это дало мне головную боль, но, наконец, нашли решение ...
Вам нужны перерывы, иначе операторы случае провалятся и все будут выполнены. Не могу поверить, что это принятый ответ. – Matthijs
Swift (3) не нуждается в 'break'. Случаи никогда не проваливаются. Порядок не важен. – Matt