【问题标题】:nsfetchedresultscontroller delete cache with name in swiftnsfetchedresultscontroller 快速删除名称为 swift 的缓存
【发布时间】:2016-02-16 19:20:38
【问题描述】:

标题已经说明了。 从 nsfetchedresultscontroller 中删除缓存的快速代码是什么。

这是我得到的错误:

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")

但我不知道怎么做。

【问题讨论】:

  • 只需查找 NSFetchedResultsController 类引用,它有一个专门的部分“缓存”。
  • 我知道该基金,但我不知道如何使用它,因为:fetchedResultsController.deleteCacheWithName("Master") 不起作用

标签: swift caching nsfetchedresultscontroller


【解决方案1】:
fetchedResultsController.deleteCacheWithName("Master")

无法编译,因为

public class func deleteCacheWithName(name: String?)

是一个类型函数,它必须在类型(类)本身上调用, 不在实例上:

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

如果您使用缓存,则必须在更改任何获取请求、其谓词或排序描述符之前清除缓存。 或者,您可以创建获取的结果控制器 不使用缓存:

NSFetchedResultsController(..., cacheName: nil)

【讨论】:

  • 我不知道我需要缓存吗?但感谢您提供的信息。
猜你喜欢
  • 1970-01-01
  • 2013-09-03
  • 1970-01-01
  • 2015-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多