Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit/UIKit-3318.16.25/UITableView.m:1297

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit/UIKit-3318.16.25/UITableView.m:1297

    Ja ich weiß, der Titel könnte aussagekräftiger sein…

    Klassisches Setup: Core Data, NSFetchedResultsController, UITableView, Nutzung der NSFetchedResultsController Delegate Methoden zum Bespaßen des UITableView.

    Sämtliche Lösungen im Netz erzählen mir, ich hätte da wohl ein Problem mit der aktuellen Anzahl an Sections und der in der Data Source angegebenen Anzahl der Sections.
    Dagegen spricht, dass ich keine weitere Info zur Assertion habe.

    Bekannte Meldung fehlt also:

    "Das sehe ich NICHT!" schrieb:

    CoreData: error: Serious application error. An exception was caught from the delegate of NSFetchedResultsController during a call to -controllerDidChangeContent:. Invalid update: invalid number of sections. The number of sections contained in the table view after the update (2) must be equal to the number of sections contained in the table view before the update (2), plus or minus the number of sections inserted or deleted (1 inserted, 0 deleted). with userInfo (null)


    Es gibt auch weder eine NSException noch sonst irgend etwas, das einen Anhaltspunkt auf die Ursache liefern könnte.

    Ich habs auch zur Laufzeit geprüft: Anzahl Sections laut FetchedResultsController entspricht Anzahl Sections laut Data Source. (Kunststück, greift ja auf dasselbe zu.)
    Auch die Anzahl der Reihen pro Sektion sehen super aus. Zumindest sind sie so, wie ich sie erwarte.

    Es knallt auch, wenn ich statt NSBlockOperation die Aktionen direkt auf der TableView ausführe.
    Und immer nur dann, wenn eine Section verschwinden oder dazu kommen soll.

    Wer hat einen Tipp? ;(
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Nachtrag:

    Offenbar triggert der NSFetchedResultsController zunächst ein -controller: didChangeSection: atIndex:(NSUInteger)sectionIndex forChangeType: und anschließend ein -controller: didChangeObject: atIndexPath: forChangeType: newIndexPath:.

    Find ich super, aber Das Internet™ behauptet, das führe zu diesen Abstürzen.
    Natürlich sagt Das Internet™ nicht, was man da tun kann. Arghl!
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Noch einmal die Reihenfolge, die der NSFetchedResultsController da einschlägt:
    // Insertion
    2015-04-10 12:16:17.944 blubb[452:60b] Inserting Section at 0
    2015-04-10 12:16:17.988 blubb[452:60b] Move Row at <NSIndexPath: 0x14646ed0> {length = 2, path = 0 - 0} To <NSIndexPath: 0x14645950> {length = 2, path = 0 - 0}

    // Deletion
    2015-04-10 12:20:57.005 blubb[1627:228434] Deleting Section at 1
    2015-04-10 12:20:57.006 blubb[1627:228434] Move Row at <NSIndexPath: 0x147b8850> {length = 2, path = 1 - 0} To <NSIndexPath: 0x147c5dd0> {length = 2, path = 0 - 0}

    Also zunächst mal werfen wir den Karton mit dem Item weg und wollen dann das erste Item aus dem Karton nehmen.
    Oder wir packen einen neuen, leeren Karton an die erste Position und legen dann das erste Item aus diesem Karton in diesen Karton… +ähm+

    Bug? Feature? Weiß man da was Genaues?
    (Wie gesagt sind die Aufrufe komplett durch den NSFetchedResultsController automatisiert gesteuert, ich mach da nix…)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • - [tableView moveRowAtIndexPath:indexPath toIndexPath:newIndexPath];

    + [tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
    + [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];

    Läuft…
    -moveRowAtIndexPath: toIndexPath tut offenbar Dinge, die nicht so ganz mit geänderten Sections zusammenarbeiten will.
    Man muss also unterscheiden, ob auch eine Sektionänderung (Löschen/Hinzufügen) passiert ist und dementsprechend löschen und neu setzen.
    Ansonsten lässt sich mit dem Verschieben ganz normal arbeiten.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P