Ich habe einen NSFetchedResultsController auf folgende Weise initiiert:
%Vor%Einige Fakten:
wasDeleted ist eine NSNumber-Eigenschaft (BOOL) von MyEntity
Wenn ich diese Eigenschaft auf [NSNumber numberWithBool:YES]
aktualisiere, ruft NSFetchedResultsControllerDelegate didChangeObject auf, löst aber NSFetchedResultsChangeUpdate statt NSFetchedResultsChangeDelete aus.
Wenn ich jedoch die Ansicht öffne und den abgerufenen Ergebnis-Controller erneut aktiviere, ist das Objekt nicht mehr vorhanden und zeigt an, dass [fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"wasDeleted == %@", [NSNumber numberWithBool:NO]]];
funktioniert.
Nach diesem NSFetchedResultsChangeUpdate, wenn cellForRow aufgerufen wird, drucke ich wasDeleted und es wird auf YES gesetzt.
Was kann hier falsch sein?
(Mit anderen Worten, NSFetchedResultsChangeDelete kann aufgerufen werden, wenn das Objekt noch im Kontext vorhanden ist, aber nicht zum Prädikat passt?)
Natürlich changeUpdate
und nicht changeDelete
. Sie haben nur einen Wert aktualisiert und nicht den gesamten Artikel gelöscht. Wenn Sie den Artikel aus Ihrer Datenbank löschen, ruft er changeDelete
auf. Und es wird nach dem neuen init nicht angezeigt, weil Ihre Tabelle auf diesem Attribut basiert.
Sie müssen auf NSFetchedResultsChangeUpdate
warten und prüfen, ob das Attribut wasDeleted
geändert wurde. Wenn dies der Fall ist, aktualisieren Sie Ihre Tabellenansicht auf Ihre Bedürfnisse, z. lösche die spezifische Zeile.
Ich mache dasselbe in meiner App und habe festgestellt, dass der -controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:newIndexPath
Delegierte zuerst mit einem Änderungstyp NSFetchedResultsChangeDelete
aufgerufen wird, gefolgt von einem zweiten Aufruf mit dem Änderungstyp NSFetchedResultsChangeUpdate
.
Das NSFetchedResultsChangeUpdate
könnte ein erwartetes Verhalten sein, aber was nicht erklärt wurde, ist warum der erste Aufruf mit NSFetchedResultsChangeDelete
fehlt. Können Sie bestätigen, dass Sie diesen Fall korrekt behandeln?
Ich hatte genau das Problem .
Verwenden Sie nicht wasDeleted
als Ihren Eigenschaftsnamen. Sie sollten keine Variationen von deleted
verwenden, wenn Sie mit Ihren CoreData-Objekten arbeiten.
Ich habe meine Eigenschaft in hidden
umbenannt und diese für das Prädikat verwendet. Alles hat so funktioniert, wie man es erwarten würde.
Tags und Links iphone ios core-data nsfetchedresultscontroller