按字母顺序和部分对 NSFetchedResultsController 进行排序

Sorting NSFetchedResultsController alphabetically and in sections

我正在使用 NSFetchedResultsController 来管理我的 tableView,我正在尝试按字母顺序将实体分类为多个部分,类似于您的联系人应用程序的外观。我在尝试 运行 我的代码时遇到此错误:the entity Exercise is not key value coding-compliant for the key "nameFirstChar".'

nameFirstCharExercise 子类中的计算 属性,如下所示:

var nameFirstChar: String {
        get {
            if let char = self.name?.first {
                return String(char)
            }
            return "#"
        }
    }

这是我设置 NSFetchedResultsController 的方式:

let fetchRequest:NSFetchRequest<Exercise> = Exercise.fetchRequest()
let sortDescriptor = NSSortDescriptor(key: "name", ascending: true)
fetchRequest.sortDescriptors = [sortDescriptor]
fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: DataController.shared.context, sectionNameKeyPath: "nameFirstChar", cacheName: nil)

不确定是什么导致了这个问题,有人有任何见解吗?

您需要确保将计算的 属性 标记为 @objc,否则它对 Core Data 框架(写在 Objective C 中)不可见。

@objc var nameFirstChar: String {
    return String(self.lastName?.first ?? "#").uppercased()
}