wann und warum mehrere NSManagedObjectContext verwenden?

9

Grundsätzlich habe ich nur einen Moc in meiner App verwendet, aber ich denke, dass ich in einigen Fällen mehrere NSManagedObjectContext verwenden sollte.

  1. wenn ich mehrere NSManagedObjectContext verwenden soll?
  2. Ich habe gehört, dass ich in einigen Fällen 3 moc verwenden sollte, aber ich weiß nicht, in welchen Fällen ich 3 moc verwenden sollte.
NOrder 11.07.2013, 12:30
quelle

3 Antworten

15

Normalerweise möchten Sie für jeden Thread, der auf die Core Data-Datenbank zugreifen wird, ein separates NSManagedObjectContext verwenden. Dadurch wird verhindert, dass die Objektdiagramme aufgrund gleichzeitiger Schreibvorgänge im selben Kontext möglicherweise in einen inkonsistenten Zustand geraten.

Der einfachste Weg, dies zu umgehen, besteht darin, für jeden Thread ein neues NSManagedObjectContext zu erstellen und ein einzelnes NSPersistentStoreCoordinator zu teilen.

Erstellen Sie eine Eigenschaft in Ihrem AppDelegate vom Typ NSManagedObjectContext und überschreiben Sie den Getter, um für jeden aufrufenden Thread einen neuen Kontext zurückzugeben. Tun Sie dies, indem Sie den threadDictionary jedes Threads verwenden.

Richten Sie zuerst Ihr managedObjectModel und Ihren persistentenStoreCoordinator wie gewohnt ein. Dann erstellen Sie Ihren Kontext in Ihrem AppDelegate und weisen Sie Ihrer Eigenschaft Folgendes zu:

%Vor%

Verwenden Sie in Ihrer managedObjectContext-Getter-Überschreibung den folgenden Code, um für jeden aufrufenden Thread einen separaten Kontext zurückzugeben:

%Vor%

Jetzt, wo auch immer in Ihrem Code Sie auf die Eigenschaft managedObjectContext von AppDelegate zugreifen, sind Sie sicher, threadsicher zu sein.

    
Ric Perrott 11.07.2013 14:38
quelle
2

Der folgende Link erklärt deutlich, wann, warum und wie der Kontext für mehrere verwaltete Objekte verwendet wird.

  

Zypern

Im Folgenden werden zwei Hauptgründe für die Verwendung von mehreren verwalteten Objektkontexten aufgeführt.

  • Um NSManagedObjectContext threadsicher zu machen, weil NSManagedObjectContext nicht threadsicher ist.
  • Sperren Sie NSManagedObjectContext , um Daten auf der Benutzeroberfläche anzuzeigen. Das bedeutet, dass beim Abrufen von Daten auf der Benutzeroberfläche und beim Abrufen von Daten vom Server Daten für untergeordnete NSManagedObjectContext abgerufen werden sollten, um Probleme mit Parallelität und Blockierung der Benutzeroberfläche zu vermeiden.
Muhammad Ali Yousaf 17.06.2015 07:02
quelle
0

Verwenden Sie unterschiedliche "moc" für verschiedene Threads

Ссылка

    
Injectios 11.07.2013 12:41
quelle

Tags und Links