NSFetchedResultController缓存的结果不会消失

时间:2017-04-21 15:16:06

标签: ios swift azure

我有一个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
}()

2 个答案:

答案 0 :(得分:0)

从您显示的配置中我绝对可以看出它与NSFetchedResultsController的缓存没有关联。因为你没有在构造函数方法中设置缓存名称。

来自Apple文档。

  

初始化NSFetchedResultsController的实例时,您   通常指定缓存名称。 (如果未指定缓存名称,   控制器不会缓存数据。)

可能你的数据库没有正确地从服务器获取更新。

答案 1 :(得分:0)

修正了它。问题出在MSSyncTable上。现在我每次刷新时都会对表执行强制清除,这样可以保持值的正确。

self.table?.forcePurge(completion: nil)