【问题标题】:NSManagedContext returning old data instead newNSManagedContext 返回旧数据而不是新数据
【发布时间】:2017-07-28 06:51:05
【问题描述】:

在我的应用程序中,我使用了 NSManagedContext 的双模型。 有一个孩子managedObjectContextNSMainQueueConcurrencyType 和父母 writerManagedObjectContextNSPrivateQueueConcurrencyType 将数据保存到 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 上找到了相同的 issue,但它的答案对我的问题没有帮助。有人知道怎么做吗?

【问题讨论】:

  • 你检查过你的 db 文件是否在任何 SQLite 浏览器中更新为最新值?

标签: ios database core-data nsmanagedobjectcontext nspersistentstore


【解决方案1】:

将主上下文的automaticallyMergesChangesFromParent 设置为YES。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    • 2011-02-13
    • 2020-07-05
    相关资源
    最近更新 更多