Ich habe Apple-Dokumente gelesen und immer noch gibt es eine Frage, auf die ich keine Antwort finden kann. Ich habe ein UIManagedDocument-Objekt, das zwei verschachtelte Kontexte hat - das untergeordnete in einem Haupt-Thread und ein übergeordnetes in einem privaten Thread. Und als nächstes habe ich eine Serverseite. Wenn die Daten vom Server ankommen, möchte ich sie in mein verwaltetes Dokument in einem Hintergrundthread einfügen.UIManagedDocument verschachtelte Kontexte
Ist es threadsicher, eine asynchrone Warteschlange zu erstellen, dort einen NSManagedObjectContext zu erstellen und den untergeordneten UIManagedDocument-Kontext festzulegen, der in einem Hauptthread erstellt wird?
dispatch_queue_t fetchQ = dispatch_queue_create("Data fetcher", NULL);
dispatch_async(fetchQ, ^{
//here goes some code for downloading data from the server
NSManagedObjectContext * backgroundContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[backgroundContext setParentContext:self.eventDatabase.managedObjectContext]; // is this thread safe?
//some code for creating objects in backgroundContext
NSLog(@"inserting data in background thread");
});
dispatch_release(fetchQ);
Mit anderen Worten - es ist Thread-sicher zu einem Kontext zuzuordnen, die auf einem privaten Thread Eltern erstellt wurden, das wurde auf einem Haupt-Thread erstellt?
BTW, vergessen Sie nicht, [backgroundContext save: & error] aufzurufen oder die Änderungen werden nicht in den übergeordneten Kontext verschoben. –
Warum benutzt er nicht einfach das parentContex von UIManagedDocument, dieser Kontext läuft im Hintergrund? –