在 NSManagedObjectSubclass 上按 Swift Computed 属性 对 NSFetchedResultsController 进行排序
Sorting NSFetchedResultsController by Swift Computed Property on NSManagedObjectSubclass
我正在使用 Swift 和 Core Data 构建应用程序。在我的应用程序中的某个时刻,我想要 UITableView
显示持久存储中当前类型的所有对象。目前,我正在检索它们并使用 NSFetchedResultsController
在 table 视图中显示它们。我希望 table 视图按我的 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
}
}
}
在我的 table 视图控制器中,我设置 NSFetchedResultsController
的 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>'
当我取出第一个排序描述符时,我的应用程序运行得很好,但我的 table 视图并没有完全按照我想要的方式排序。如何根据 Swift 中的 NSManagedObject
子类的计算 属性 对我的 table 视图进行排序?
正如 Martin 所指出的,您不能对计算的 属性 进行排序。每次击球时只需更新一个新存储的 属性 球杆。
我正在使用 Swift 和 Core Data 构建应用程序。在我的应用程序中的某个时刻,我想要 UITableView
显示持久存储中当前类型的所有对象。目前,我正在检索它们并使用 NSFetchedResultsController
在 table 视图中显示它们。我希望 table 视图按我的 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
}
}
}
在我的 table 视图控制器中,我设置 NSFetchedResultsController
的 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>'
当我取出第一个排序描述符时,我的应用程序运行得很好,但我的 table 视图并没有完全按照我想要的方式排序。如何根据 Swift 中的 NSManagedObject
子类的计算 属性 对我的 table 视图进行排序?
正如 Martin 所指出的,您不能对计算的 属性 进行排序。每次击球时只需更新一个新存储的 属性 球杆。