2017-04-21 43 views
0

我有一個NSFetchedResultsController是從一個天藍色的例子。它運行良好並能正確地從數據庫中提取數據,但是如果我退出應用程序並從數據庫中刪除記錄,它們仍會顯示在我的應用程序中,並且無法在不重新安裝應用程序的情況下讓它們消失。有沒有人有任何想法可能會導致這種情況?我沒有一個緩存集,並且我嘗試了在啓動時設置一個並刪除它,但它沒有奏效。這是fetchedResultController的代碼。NSFetchedResultController緩存的結果不會消失

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

修正了它。問題出在MSSyncTable上。現在我每次刷新時都會在表上執行一次強制清除操作,這會使值保持正確。

self.table?.forcePurge(completion: nil) 
0

從您顯示的配置中我肯定可以看出它沒有連接到緩存的NSFetchedResultsController。因爲您沒有在構造方法中設置緩存名稱。

從Apple文檔。

當您初始化一個NSFetchedResultsController的實例時, 通常指定一個緩存名稱。 (如果您沒有指定緩存名稱,則控制器不會緩存數據。)

可能您的數據庫沒有從服務器正確獲取更新。

+0

但是記錄絕對存儲在設備上,因爲我仍然可以訪問我以前看過的記錄,當啓動沒有互聯網連接的應用時。我也試過將nil傳遞給刪除緩存的函數,但沒有任何區別。 –