Benutzerdefinierte NSFetchedResultsController-Sortierung wird nicht aufgerufen

8

Ich versuche gerade, ein UITableView in meinem Projekt von Core Data mit NSFetchedResultsController zu füllen. Ich verwende eine benutzerdefinierte Suche mit einem Komparator (obwohl ich auch einen Selektor probiert habe und ein identisches Problem hatte):

%Vor%

Wenn ich diese Registerkarte betrete, habe ich das gesamte Programm protokolliert und festgestellt, dass der NSFetchedResultsController beim Abrufen nicht einmal in den Vergleichsblock gelangt. Es sortiert es stattdessen mit einer Standardsortiermethode.

Wenn ich ein Objekt mit einem objectName lösche und hinzufüge, wird es jedoch in den Vergleichsblock eingegeben und die Tabelle korrekt sortiert.

Warum sortiert NSFetchedResultsController den Komparator nicht, bis das verwaltete Objektmodell geändert wird?

Hinweise: Ich habe auch versucht, Caching zu deaktivieren und / oder einen Aufruf in viewDidLoad: durchzuführen, aber es scheint, dass es egal ist, wie oft ich hole, aber wann. Aus irgendeinem Grund verwendet es nur meine Sortierung, nachdem das Objektmodell geändert wurde.

    
Matthew Bischoff 25.01.2011, 03:47
quelle

3 Antworten

8

Es gibt ein paar Dinge, die ich mir vorstellen kann. Erstens, obwohl dies möglicherweise nicht Ihr Problem ist, können Sie nicht nach vorübergehenden Eigenschaften sortieren. Wahrscheinlicher ist jedoch, dass beim Sortieren in einem Modell, das von einem SQL-Speicher unterstützt wird, der Vergleicher in eine SQL-Abfrage "kompiliert" wird und nicht alle Objective-C-Funktionen verfügbar sind. In diesem Fall müssten Sie nach dem Abrufen im Speicher sortieren.

BEARBEITEN: Sehen Sie dies doc , speziell der Abschnitt Prädikate abrufen und Deskriptoren sortieren.

    
Don 25.01.2011, 15:54
quelle
1

Ich sehe das gleiche Problem und eine Möglichkeit, es zu umgehen, ist ein Objekt zu modifizieren, die Änderung zu speichern, dann den ursprünglichen Wert wiederherzustellen und erneut zu speichern.

%Vor%     
erne 14.11.2011 23:30
quelle
0

Entschuldigung, aber haben Sie den letzten Abruf-Teil in Ihrem Code-Snippet übersehen?:

%Vor%

Vergessen Sie nicht, die Anfrage auch zu veröffentlichen:

%Vor%     
petert 25.01.2011 09:00
quelle