Ich habe zwei Entitäten in Core Data (siehe unten) und verwende NSFetchedResultsController
mit [NSPredicate predicateWithFormat:@"calendar.subscribed == 1"];
, um das "Event" -Objekt zu extrahieren.
Kalender
Ereignis
Alles funktioniert gut, aber wenn ich die Eigenschaft subscribed
eines "Kalenders" ändere und den Kontext in einem anderen Thread speicher, wird controllerDidChangeContent
nicht aufgerufen.
kann ich zum Nachholen zwingen? und wie?
Leider überwacht der FRC nur die Objekte, die Gegenstand des Abrufs sind (in Ihrem Fall Event
). Daher werden Änderungen an Attributen verwandter Objekte nicht erkannt, obwohl diese Änderungen Auswirkungen auf die Bewertung des Prädikats haben könnten.
Eine Problemumgehung (wenn Sie mit dem Performance-Treffer leben können) ist, wenn Sie den Attributwert Calendar
ändern, einen Wert für das zugehörige Event
-Objekt auf seinen vorhandenen Wert zu ändern - keine Änderung in der Theorie, aber genug, um den FRC auszulösen, um das Prädikat für dieses Event
neu zu bewerten.
Wie in der anderen Antwort erwähnt, nimmt NSFetchedResultsController nur die Änderungen an den Event-Objekten und nicht am Kalender auf. Um eine Aktualisierung zu erzwingen, können Sie eine NSNotification überall dort posten, wo Sie den abonnierten Status eines Kalenders direkt nach dem Aufruf von 'saveContext' aktualisieren:
%Vor%Fügen Sie dann einen Beobachter in der Klasse hinzu, die Sie aktualisieren möchten:
%Vor%Füllen Sie eine 'updateEventData' (oder wie auch immer Sie es nennen möchten) Methode mit Code aus, um den Abruf auszuführen, und Sie sollten gut gehen.
Tags und Links objective-c ios core-data nsfetchedresultscontroller