0

在我的应用程序中,我使用了NSManagedContext的双重模型。 有一个孩子managedObjectContextNSMainQueueConcurrencyType和父母 writerManagedObjectContextNSPrivateQueueConcurrencyType保存数据到PersistentStoreCoordinator。我能够将数据保存在数据库中,但在检索时,我正在获取旧值而不是新值。NSManagedContext返回旧数据,而不是新的

下面的代码是将上下文保存到parent context,然后保存到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]); 
       } 
      }]; 
     }]; 

在堆栈溢出时发现了相同的issue,但其答案对我的问题没有帮助。任何人都知道如何做到这一点?

+0

如果在任何SQLite浏览器中使用最新值更新了数据库,你是否检查过你的数据库文件? – Ellen

回答

0

将主要上下文设置为automaticallyMergesChangesFromParent

写入上下文直接与PersistentStoreCoordinator对话,所以没有办法让主要上下文知道有任何改变。上下文有一个缓存,并不总是访问数据库来获取数据。在iOS 10之前,您需要监控通知并致电mergeChangesFromContextDidSaveNotification;在iOS 10 automaticallyMergesChangesFromParent被添加,这使得这更容易。