NSManagedContext 返回旧数据而不是新数据
Posted
技术标签:
【中文标题】NSManagedContext 返回旧数据而不是新数据【英文标题】:NSManagedContext returning old data instead new 【发布时间】:2017-07-28 06:51:05 【问题描述】:在我的应用程序中,我使用了 NSManagedContext 的双模型。
有一个孩子managedObjectContext
和NSMainQueueConcurrencyType
和父母
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 上找到了相同的 issue,但它的答案对我的问题没有帮助。有人知道怎么做吗?
【问题讨论】:
你检查过你的 db 文件是否在任何 SQLite 浏览器中更新为最新值? 【参考方案1】:将主上下文的automaticallyMergesChangesFromParent
设置为YES。
写入上下文直接与 PersistentStoreCoordinator 对话,因此无法通过主上下文知道有任何变化。上下文有一个缓存,并不总是访问数据库来获取数据。在ios 10之前你需要监听通知并拨打mergeChangesFromContextDidSaveNotification
;在 iOS 10 中添加了 automaticallyMergesChangesFromParent
,这让这变得更容易了。
【讨论】:
以上是关于NSManagedContext 返回旧数据而不是新数据的主要内容,如果未能解决你的问题,请参考以下文章
Eloquent - 编辑表格行并返回新结果数据 - 检索旧数据
如何每次将新数据保存到我的 plist 文件而不是替换旧数据?