2012-12-07 15 views
8
nicht

Ich bin mit magischen Record: https://github.com/magicalpanda/MagicalRecordmagischer Rekord Spar

Ich versuche, Aufzeichnungen zu speichern, die ich von meiner Website auf die SQLLite Datenbank mit magischer Aufnahme und Core Data, aber ich halte den Fehler bekommen: Hier

MR_saveWithErrorCallback:](0xaaa6bd0) NO CHANGES IN CONTEXT <NSManagedObjectContext (0xaaa6bd0): *** BACKGROUND SAVING (ROOT) ***> on *** BACKGROUND THREAD *** - NOT SAVING 

ist der Code:

   for(int i = 0; i < count; i += 1) 
      { 
       // results = array of all services from site 
       NSDictionary * result = [results objectAtIndex: i]; 

       NSNumber * sid = @([[result objectForKey: @"id"] intValue]); 
       NSNumber * parent = @([[result objectForKey: @"parent"] intValue]); 
       Service * service = [Service createEntity]; 

       NSString * image = [NSString stringWithFormat: @"%@", [result objectForKey: @"image"]]; 

       NSString * name = [NSString stringWithFormat: @"%@", [result objectForKey: @"name"]]; 
       NSString * machine_name = [NSString stringWithFormat: @"%@", [result objectForKey: @"machine_name"]]; 


       [service setDate: [NSDate date]]; 
       [service setSid: sid]; 
       [service setName: name]; 

       [service setImage: image]; 
       [service setParent: parent]; 
       [service setMachine_name: machine_name]; 


       [[NSManagedObjectContext defaultContext] saveNestedContexts]; 

Antwort

7

Das Problem ist, dass Sie nicht den richtigen Kontext speichern. Wenn Sie sich die Quelle ansehen, erstellt das ManagedObject im Kontext für den aktuellen Thread. Nicht im defaultContext.

Sie müssen also statt [[NSManagedObjectContext defaultContext] saveNestedContexts] den Kontext für den aktuellen Thread speichern (d. H. Den Kontext, in dem das ManagedObject erstellt wurde). So sollte der Code [[NSManagedObjectContext MR_contextForCurrentThread] sein

5

Haben Sie versucht, die saveInBackgroundWithBlock: Dienstprogramm Methode?

Wenn nicht möchten Sie vielleicht etwas wie den folgenden Code versuchen. Beachten Sie, dass es wird alle Ihre Objekte in einem Rutsch im Hintergrund speichern und dann den Abschluss Block auf dem Haupt-Thread ausführen:

[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext){ 
    Service *service = [Service createInContext:localContext]; 

    ... set values ... 
} completion:^{ 
    ... 
}]; 

Other than that, können Sie sehen, ob [[NSManagedObjectContext defaultContext] hasChanges] JA zurück überprüfen, ob es ein Problem ist mit der Rettung oder der Entität selbst.

0

bewegen die Linie

[[NSManagedObjectContext defaultContext] saveNestedContexts]; 

außerhalb der for-Schleife, ist es für mich gearbeitet

1

In meinem schnellen Projekt, das ich tun:

MagicalRecord.setupCoreDataStack() 

Also ich Zum Speichern auf die Festplatte müssen folgende Schritte ausgeführt werden:

NSManagedObjectContext.MR_defaultContext().MR_saveToPersistentStoreAndWait()