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被添加,這使得這更容易。