我有一个NSFetchedResultsController,它来自一个蔚蓝的例子。它运行良好并正确地从数据库中提取数据,但是如果我退出应用程序并从数据库中删除记录,它们仍会显示在我的应用程序中,并且如果不重新安装应用程序,就无法使它们消失。有谁知道是什么原因引起的?我没有缓存集,我已经尝试设置一个并在启动时删除它,但它没有工作。这是fetchedResultController的代码。
lazy var fetchedResultController: NSFetchedResultsController<NSFetchRequestResult> = {
let fetchRequest:NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: "Events")
let managedObjectContext = (UIApplication.shared.delegate as! AppDelegate).managedObjectContext!
fetchRequest.predicate = NSPredicate(format: "completed != true")
//fetchRequest.predicate = NSPredicate(format: "text != ''")
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "createdAt", ascending: true)]
let resultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
resultsController.delegate = self;
return resultsController
}()
答案 0 :(得分:0)
从您显示的配置中我绝对可以看出它与NSFetchedResultsController
的缓存没有关联。因为你没有在构造函数方法中设置缓存名称。
来自Apple文档。
初始化NSFetchedResultsController的实例时,您 通常指定缓存名称。 (如果未指定缓存名称, 控制器不会缓存数据。)
可能你的数据库没有正确地从服务器获取更新。
答案 1 :(得分:0)
修正了它。问题出在MSSyncTable上。现在我每次刷新时都会对表执行强制清除,这样可以保持值的正确。
self.table?.forcePurge(completion: nil)