0

在我的应用程序中,我使用了 NSManagedContext 的双模型。有一个孩子managedObjectContextNSMainQueueConcurrencyType父母 writerManagedObjectContext一起NSPrivateQueueConcurrencyType将数据保存到PersistentStoreCoordinator. 我能够将数据保存在数据库中,但是在检索时我得到的是旧值而不是新值。

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

在 stack-overflow 上发现了同样的问题,但它的答案对我的问题没有帮助。有谁知道该怎么做?

4

1 回答 1

0

automaticallyMergesChangesFromParent主要上下文设置为 YES。

写入上下文直接与 PersistentStoreCoordinator 对话,因此无法通过主上下文知道有任何变化。上下文有一个缓存,并不总是访问数据库来获取数据。在 iOS 10 之前你需要监听通知和通话mergeChangesFromContextDidSaveNotification;在 iOS 10automaticallyMergesChangesFromParent中添加了这使得这更容易。

于 2017-07-30T07:00:19.007 回答