0

In meiner App habe ich Double Model of NSManagedContext verwendet. Haben Sie ein Kind managedObjectContext mit NSMainQueueConcurrencyType und Eltern writerManagedObjectContext mit NSPrivateQueueConcurrencyType, die Daten zu PersistentStoreCoordinator speichert. Ich bin in der Lage, Daten in der Datenbank zu speichern, aber beim Abrufen bekomme ich alte Werte statt neu.NSManagedContext gibt alte Daten statt neu

Unten Code ist zu speichern Kontext zu parent context und dann zu PersistentStoreCoordinator.

[managedObjectContext performBlock:^{ 
      //push to parent 
      //NSLog(@"pushing to parent context (writer context)"); 
      NSError * error; 
      if([managedObjectContext hasChanges] && ![managedObjectContext save:&error]){ 
       NSLog(@"main Save Error: %@", [error localizedDescription]); 
      } 

      //NSLog(@"pushing to persistentstore"); 
      [self.writerManagedObjectContext performBlock:^{ 
       //push to parent 
       NSError * error; 
       if([self.writerManagedObjectContext hasChanges] && ![self.writerManagedObjectContext save:&error]){ 
        NSLog(@"writer Save Error: %@", [error localizedDescription]); 
       } 
      }]; 
     }]; 

die gleichen issue auf Stapelüberlauf gefunden, aber die Antwort ist für mein Problem nicht hilfreich. Weiß jemand, wie man das macht?

+0

Haben Sie Ihre DB-Datei überprüft, wenn sie mit den neuesten Werten in einem SQLite-Browser aktualisiert wurde? – Ellen

Antwort

0

automaticallyMergesChangesFromParent des Hauptkontextes auf JA setzen.

Der Schreibkontext spricht direkt mit dem PersistentStoreCoordinator, so dass es keine Möglichkeit gibt, im Hauptkontext zu erkennen, dass es Änderungen gibt. Der Kontext hat einen Cache und greift nicht immer auf die Datenbank zu, um die Daten zu erhalten. Vor iOS 10 müssen Sie die Benachrichtigungen überwachen und mergeChangesFromContextDidSaveNotification anrufen; in iOS 10 wurde automaticallyMergesChangesFromParent hinzugefügt, was dies viel einfacher macht.

Verwandte Themen