NSFetchedResultsController objectAtIndex-, objectAtIndexPath-, indexPathForObject-Inkonsistenzen

8

Ich habe ein abgerufenes Ergebnis mit einem einzelnen Abschnitt. Ich kann auf die Objekte mit [[fetchedResultsController fetchedObjects] objectAtIndex:index] für alle Objekte zugreifen. Aber es schlägt fehl, wenn ich objectAtIndexPath wie folgt verwende: [fetchedResultsController objectAtIndexpath:indexPath]

Ein Fehler tritt auf, nachdem ich eine Zeile (für eines der SearchResult-Objekte) in die entsprechende Tabelle eingefügt habe. Das Objekt scheint korrekt in die neue Tabelle eingefügt zu werden. Nachdem ich dies visuell bestätigt habe, wähle ich eine der Zeilen aus, und dann beginnt der Spaß.

Hier ist der Code, in dem der Fehler auftritt:

%Vor%

Ich habe einen Fehler in der letzten Zeile. Das Protokoll sieht folgendermaßen aus:

%Vor%

Nachdem ich die NSLog-Anweisungen ausgeführt habe, bekomme ich eine Ausnahme in der letzten Zeile mit [fetchedResultsController objectAtIndexPath:indexPath] . Es passiert auch für andere Indexwerte, aber sie sehen immer gültig aus.

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'no object at index 2 in section at index 0'

Also, um zusammenzufassen, scheint es die richtige Anzahl von abgeholten Objekten zu geben, es gibt einen Abschnitt (0), ich kann auf jeden nach einer Methode zugreifen, aber nicht nach der anderen. Das indexPathForObject: gibt immer (null) zurück.

Ist das ein Fehler oder verkenne ich etwas?

AKTUALISIEREN

Hier ist der Code, der die Protokollmethoden NSFetchedResultsControllerDelegate implementiert.

%Vor%

UPDATE 2

Ich weiß nicht, ob es wichtig ist, aber das TableView wird mit dieser Zeile initialisiert:

%Vor%

UPDATE 3

Wenn ich die störende Zeile wie folgt ändere, funktioniert es gut. Aber ich würde die Indizierung lieber so beibehalten, wie es mit der Tabelle ist.

%Vor%     
Jim 05.11.2011, 06:00
quelle

1 Antwort

0

Ich hatte jetzt das gleiche Problem.

Für mich hat es geholfen, NSFetchedResultsController mit cacheName: nil zu initialisieren.

    
Clemens 23.07.2014 08:17
quelle