iOS8 Swift: deleteRowsAtIndexPaths se bloque

Je vais avoir quelques problèmes avec la suppression d'une ligne de mon tableView dans Swift, iOS 8, Xcode 6 Beta 6. Chaque fois que j'essaie de supprimer une ligne, j'obtiens une erreur le long de la lignes de

Échec d'Assertion dans -[UITableView _endCellAnimationsWithContext:],
/SourceCache/UIKit_Sim/UIKit-3302.3.1/UITableView.m:1581 2014-08-30
20:31:00.971 Classe Directory[13290:3241692] *** fin de l'app en raison de
uncaught exception 'NSInternalInconsistencyException', la raison:
'Mise à jour incorrecte: non valides nombre de lignes dans la section 1. Le nombre de
les lignes contenues dans un article existant après la mise à jour (25) doit être
égal au nombre de lignes contenues dans cette section avant de l'
mise à jour (25), plus ou moins le nombre de lignes insérées ou supprimées à partir de
cet article (0 inséré, 1 supprimés) et plus ou moins le nombre de
les lignes déplacées dans ou hors de la section (0 déplacé, 0).

J'ai lu toutes les réponses à ce problème fréquent, ici, et j'estime avoir rempli les conditions recommandées. L'élément semble être retiré à partir du modèle de données -- quand je recharge l'application, l'élément supprimé est passé de la table -- mais il semble y avoir quelques restes dans le fichier sqlite et bien sûr, les mathématiques ne fonctionne pas. La println que crache le indexPath montre la bonne Section et de la Ligne. Je suis très perplexe. Cela devrait être simple, mais je suis absent quelque chose de stupide, je suis sûr, je soupçonne que dans le modèle de données de suppression. Projet complet sur Github.

func numberOfSectionsInTableView(tableView: UITableView!) -> Int {

    return fetchedResultController.sections.count

}


func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
    return fetchedResultController.sections[section].numberOfObjects

    }

func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
    let cell = tableViewMain.dequeueReusableCellWithIdentifier("CellMain", forIndexPath: indexPath) as UITableViewCell

        let personForRow = fetchedResultController.objectAtIndexPath(indexPath) as Person
        cell.textLabel.text = personForRow.fullName()

        return cell

}

func tableView(tableView: UITableView!, canEditRowAtIndexPath indexPath: NSIndexPath!) -> Bool {
    return true
}

func tableView(tableView: UITableView!, editingStyleForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCellEditingStyle {
    return UITableViewCellEditingStyle.Delete
}

 func tableView(tableView: UITableView!, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath!) {
    println("section and row \(indexPath.section) \(indexPath.row) ")
    if (editingStyle == UITableViewCellEditingStyle.Delete) {
    let personForRow : NSManagedObject = fetchedResultController.objectAtIndexPath(indexPath) as Person
    context?.deleteObject(personForRow)
    context?.save(nil)
        tableViewMain.beginUpdates()
    tableViewMain.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Fade)
        tableViewMain.endUpdates()
    }
double possible de crash sur deleteRowsAtIndexPaths
Pas doublon. Les réponses qui ont été insuffisantes.

OriginalL'auteur Nate Birkholz | 2014-08-31