我正在使用Swift和Core Data构建应用程序。在我的应用程序中的某一点上,我想UITableView展示一下持久存储中当前类型的所有对象。目前,我正在检索它们,并使用来在表格视图中显示它们NSFetchedResultsController。我希望表视图按NSManagedObject子类的计算属性进行排序,如下所示:
UITableView
NSFetchedResultsController
NSManagedObject
class MHClub: NSManagedObject{ @NSManaged var name: String @NSManaged var shots: NSSet var averageDistance: Int{ get{ if shots.count > 0{ var total = 0 for shot in shots{ total += (shot as! MHShot).distance.integerValue } return total / shots.count } else{ return 0 } } }
在我的表视图控制器,我建立我NSFetchedResultsController的fetchRequest如下:
fetchRequest
let request = NSFetchRequest(entityName: "MHClub") request.sortDescriptors = [NSSortDescriptor(key: "averageDistance", ascending: true), NSSortDescriptor(key: "name", ascending: true)]
像这样设置它会使我的应用程序崩溃,并在日志中显示以下消息:
'NSInvalidArgumentException', reason: 'keypath averageDistance not found in entity <NSSQLEntity MHClub id=1>'
当我取出第一个排序描述符时,我的应用程序运行正常,但是我的表视图未完全按照我的期望排序。如何NSManagedObject在Swift 中基于子类的计算属性对表格视图进行排序?
正如马丁所指出的,您不能对计算属性进行排序。每次拍摄时,只需更新俱乐部的新存储属性即可。