NSFetchedResultsController performFetch im Hintergrund-Thread

8

Ich muss einen Abruf über NSFetchedResultsController in einem Hintergrundthread durchführen.

Meine aktuelle Lösung ist folgendermaßen aufgebaut:

%Vor%

Meine ersten Tests liefen gut, aber ist das der richtige Weg?

    
Florian Mielke 01.08.2011, 12:31
quelle

2 Antworten

5

Da der abgerufene Ergebnis-Controller die Daten steuern soll, die eine Tabellenansicht definieren, gehört er in den Vordergrund-Thread / Vorgang, auf dem die UI läuft. Es ist ziemlich sinnlos, es auf einen Hintergrund-Thread zu setzen, da Sie alle Vorteile verlieren würden, es überhaupt zu verwenden.

Ich wäre auch besorgt über die Auswirkungen des Sendens der FRC-Delegiertennachrichten über asynchrone Threads. Ich bin mir nicht sicher, wie zuverlässig das wäre.

Nachdem Sie all das gesagt haben, sieht die Skizze Ihrer Implementierung so gut wie möglich aus.

    
TechZen 01.08.2011, 14:51
quelle
1

Ich glaube, dass mit diesem Ansatz etwas grundsätzlich nicht stimmt, da Sie verwaltete Objekte über Threads hinweg teilen (Sie holen Objekte in einem Thread ab und referenzieren sie in Ihrem Hauptthread). In der Praxis wird es funktionieren, aber manchmal zu Abstürzen führen. Weil Apple klarstellt, dass die einzige Möglichkeit, verwaltete Objekte über Threads hinweg zu nutzen, die Methode objectWithID: method oder die MOCDidSave-Benachrichtigungen ist.

Aus dem Handbuch zur Kerndaten-Programmierung :

  

Sie rufen in einem verwalteten Objektkontext in einem Hintergrundthread ab und   Übergeben Sie die Objekt-IDs der abgerufenen Objekte an einen anderen Thread. In dem   zweiter Thread (normalerweise der Hauptthread der Anwendung, damit Sie   kann dann die Ergebnisse anzeigen), Sie verwenden den zweiten Kontext, um sich anzumelden   Objekte mit diesen Objekt-IDs (Sie verwenden objectWithID: um zu instanziieren   das Objekt).

    
samvermette 13.09.2011 14:25
quelle