2017-03-05 43 views
0

我試圖獲取一個實體過濾其屬性(單詞)之一,我使用fetchedResultsController爲此,一切都看起來不錯。該列表已加載並顯示在我的tableView中,我甚至可以對列表進行排序,但是當我嘗試使用謂詞進行篩選時,沒有任何反應。我不知道我做錯了什麼。我嘗試了蘋果網站和一些來自stackoverflow的問題,我真的不知道我做錯了什麼。fetchedResultsController不過濾(fetchRequest)

這裏是我的代碼爲fetchedResultsController

lazy var fetchedResultsController: NSFetchedResultsController<TranslationContainer> = { 

    let fetchRequest = NSFetchRequest<TranslationContainer>() 

    let entity = TranslationContainer.entity() 
    fetchRequest.entity = entity 


    let predicate = NSPredicate(format: "word == %@", "Bed")// doesn't filter 
    fetchRequest.predicate = predicate 


    let sortDescriptor = NSSortDescriptor(key: "word", ascending: true) 
    fetchRequest.sortDescriptors = [sortDescriptor] 

    fetchRequest.fetchBatchSize = 20 

    let fetchedResultsController = NSFetchedResultsController(
     fetchRequest: fetchRequest, 
     managedObjectContext: self.managedObjectContext, 
     sectionNameKeyPath: nil, 
     cacheName: "TranslationContainers") 
    fetchedResultsController.delegate = self 
    return fetchedResultsController 
}() 

任何建議將非常感激!

回答

0

我修正了這個問題,其實問題是緩存cacheName: "TranslationContainers"。它添加了過濾代碼後沒有更新。我只是改變了緩存的名字,並且解決了!

2

NSFetchedResultsController可選地緩存結果,如果您像上面的代碼那樣更改NSPredicate,緩存內容可能會不同步。解決此問題的一種方法是在設置新謂詞之前刪除緩存:

NSFetchedResultsController.deleteCache(withName: "TranslationContainers") 
fetchedResultsController.fetchRequest?.predicate = predicate