Core Data Multi Thread

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Core Data Multi Thread

    Hi,

    ich habe ein Problem mit dem Context. Ich möchte in einer Child-Klasse mit dem Context arbeiten.

    Ich mache dieses ganze so in der Child-Klasse.

    Quellcode

    1. NSManagedObjectContext *child = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
    2. NSManagedObjectContext *parent = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
    3. [child setParentContext:parent];
    4. //hier mache ich was mit dem child Context
    5. NSError *childError = nil;
    6. [child save:&childError];
    7. [parent performBlock:^{
    8. NSError *parentError = nil;
    9. [parent save:&parentError];
    10. }];
    Alles anzeigen


    Leider findet übergibt er wohl den Inhalt vom Parent- nicht an den Child-Context.

    Ich bekomme nämlich folgenden Fehler:

    "could not locate an NSManagedObjectModel for entity...."


    Was mache ich falsch ?

    Danke
  • Viel Spaß dabei. Ich habe es nach Wochen rumgesuche aufgegeben und mache es jetzt so, daß ich alle Änderungen am MOC nur noch im Maintask vornehme. Ich bereite die Inhalte der MO's (als normale Objekte) im Hintergrund vor und wenn sie fertig sind, schicke ich sie per Notification an den Maintask, erstelle dort einen MO und kopiere die Werte aus meiner MO Klasse hinein. Alles andere hat immer nur halbseiden funktioniert. Zigmal dachte ich "Jetzt hab ichs" und dann ging doch wieder irgendwas anderes nicht. Das Ganze dann auch noch timing abhängig, so das es fast unmöglich zu debuggen war.

    Wenn Du eine gute Lösung findest wäre ich sehr interessiert.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • So 'out-of-the-box' dürfte das nichts werden.

    Arbeite mal den Core Data Concurrency Guide von Apple durch.
    Das ist die Variante mit NSManagedObjectContextDidSaveNotification. Es gibt aber eine neuere
    WWDC 2012

    Lucas de Vil schrieb:

    Viel Spaß dabei. Ich habe es nach Wochen rumgesuche aufgegeben und mache es jetzt so, daß ich alle Änderungen am MOC nur noch im Maintask vornehme.
    Ja, dass befürchte ich auch :-(.

    Thallius schrieb:

    Wenn Du eine gute Lösung findest wäre ich sehr interessiert.
    Sorry, ich gabe es auf. Ich nehme jetzt MagicRecord

    Danke für die Hilfe.
  • Wo habt ihr da Probleme? Ich erzeuge einfach für jeden neuen Thread der Objekte ändert/erzeugt einen neuen NSManagedObjectContext und am Ende dann [context save:&error];

    Im Main thread habe ich eine Singleton Klasse die meinen Core Data Container "abbildet" und die merged die Änderungen aus der NSManagedObjectContextDiSaveNotification.

    Das geht 1A! Da ich aus der DB-Welt (Oracle) komme war mir beim Lesen schon klar das ein NSManagedObjectContext quasi eine Datenbanksession entspricht (also einem User) - dass mit dem Merge ist nett in "normalen" Datenbank muss man den Refetch etc. selber machen.