Hintergrundspeicherung mit Core Data?

Ich habe eine Core Data-basierte iPhone-Anwendung, mit der 1000 verwaltete Objekte beim Beenden gespeichert werden müssen. Dies dauert mehr als 8 Sekunden. Das Betriebssystem bricht die App jedoch ab, wenn sie nicht in ca. 6 Sekunden.

Ich möchte die Objekte nicht früher speichern, da der Benutzer dann 8 Sekunden länger warten muss, bis die Ergebnisse angezeigt werden.

Ist es möglich, die Objekte früher in einem Hintergrund-Thread zu speichern, während weiterhin (schreibgeschützt) auf den NSManagedObjectContext im Haupt-Thread zugegriffen werden kann, um die Daten anzuzeigen? Oder ist es irgendwie möglich, die verwalteten Objekte zu duplizieren und die Duplikate zum Speichern an einen Hintergrund-Thread zu übergeben?

Zur Verdeutlichung passiert in der Anwendung jetzt Folgendes: Ich habe einen Hintergrund-Thread, der mehr als 1000 Objekte in ungefähr 1 Sekunde importiert. Wenn ich beim Importieren speichere, dauert es viel länger als 1 Sekunde. Um diese Elemente mit minimaler Verzögerung anzuzeigen, wird der Kontext ohne Speichern im Haupt-Thread übergeben, und der Benutzer erhält seine Ergebnisse so schnell wie möglich.

Ich habe jetzt das Problem, wie ich diese Objekte speichern kann, ohne dass der Benutzer die 8 Sekunden warten muss. Wenn ich vor der Übergabe im Hintergrund-Thread speichere, muss der Benutzer warten. Wenn ich nach der Übergabe im Vordergrund speichere, muss der Benutzer warten. Die einzigen zwei möglichen Ansätze, die ich derzeit sehen kann, sind:

Irgendwie haben Kerndaten ihre SQLite-Zugriffe im Hintergrund, während der Haupt-Thread immer noch reaktiv bleibtÜbergeben der nicht gespeicherten Objekte von einem Kontext in einen anderen und Speichern im Hintergrundthread

Beide Ansätze scheinen unmöglich (zumindest laut Core-Data-Dokumentation). Also gibt es keine andere Lösung, als den Benutzer länger warten zu lassen (und vielleicht eine schöne rotierende Sanduhr anzuzeigen :-)?

Grüße, Jochen

Antworten auf die Frage(1)

Ihre Antwort auf die Frage