2016-02-16 23 views
2

標題已說明它。 從nsfetchedresults控制器中刪除緩存的swift代碼是什麼?nsfetchedresultscontroller在swift中使用名稱刪除緩存

這是我得到的錯誤:

You have illegally mutated the NSFetchedResultsController's fetch request, its predicate, or its sort descriptor without either disabling caching or using +deleteCacheWithName:' 

,代碼:

if arranged == "naam - A-Z" { 
      let sortDescriptor = NSSortDescriptor(key: "name", ascending: true) 
      self.fetchedResultsController.fetchRequest.sortDescriptors = [sortDescriptor] 
     }else if arranged == "naam - Z-A" { 
      let sortDescriptor = NSSortDescriptor(key: "name", ascending: false) 
      self.fetchedResultsController.fetchRequest.sortDescriptors = [sortDescriptor] 
     }else if arranged == "gemiddelde - 1-10" { 
      let sortDescriptor = NSSortDescriptor(key: "gemiddelde", ascending: true) 
      self.fetchedResultsController.fetchRequest.sortDescriptors = [sortDescriptor] 
     }else if arranged == "gemiddelde - 10-1" { 
      let sortDescriptor = NSSortDescriptor(key: "gemiddelde", ascending: false) 
      self.fetchedResultsController.fetchRequest.sortDescriptors = [sortDescriptor] 
     } 

     do { 
      try _fetchedResultsController!.performFetch() 
     } catch { 
      // Replace this implementation with code to handle the error appropriately. 
      // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
      // print("Unresolved error \(error), \(error.userInfo)") 
      abort() 
     } 
     tableView.reloadData() 

我任何你需要的更多信息,請讓我知道。

更新:

我想是這樣的:

fetchedResultsController.deleteCacheWithName("Master") 

但我不知道怎麼辦。

+0

只是查找的NSFetchedResultsController類的引用,它有一個專門的一節「高速緩存」。 –

+0

我知道基金,但我不知道如何使用它,因爲這:fetchedResultsController.deleteCacheWithName(「主」)不起作用 – Cing

回答

6
fetchedResultsController.deleteCacheWithName("Master") 

不編譯,因爲

public class func deleteCacheWithName(name: String?) 

型功能,必須呼籲類型(類)本身, 不是一個實例:

// Swift 2: 
NSFetchedResultsController.deleteCacheWithName("Master") 
// Swift 3: 
NSFetchedResultsController<NSFetchRequestResult>.deleteCache(withName: "Master") 

如果您正在使用緩存,則必須在更改任何獲取請求,謂詞或其排序描述符之前清除緩存。 或者,也可以不使用高速緩存中創建所取得的成果控制器 :

NSFetchedResultsController(..., cacheName: nil) 
+0

我不知道我需要緩存嗎?但是,謝謝你的信息。 – Cing