Tôi đang xây dựng một ứng dụng bằng Swift with Core Data. Tại một thời điểm trong ứng dụng của tôi, tôi muốn có một UITableView
hiển thị tất cả các đối tượng thuộc loại hiện có trong Cửa hàng kiên trì. Hiện tại, tôi đang truy xuất chúng và hiển thị chúng trong chế độ xem bảng bằng cách sử dụng NSFetchedResultsController
. Tôi muốn xem bảng được sắp xếp theo một tài sản tính của NSManagedObject
lớp con của tôi, trông như thế này:Sắp xếp NSFetchedResultsController bằng Swift Computed Property trên NSManagedObjectSubclass
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
}
}
}
Trong điều khiển xem bàn của tôi, tôi đang thiết lập NSFetchedResultsController
's fetchRequest
của tôi như sau:
let request = NSFetchRequest(entityName: "MHClub")
request.sortDescriptors = [NSSortDescriptor(key: "averageDistance", ascending: true), NSSortDescriptor(key: "name", ascending: true)]
Đặt nó lên như thế này gây ra ứng dụng của tôi sụp đổ với thông báo sau trong nhật ký:
'NSInvalidArgumentException', reason: 'keypath averageDistance not found in entity <NSSQLEntity MHClub id=1>'
Khi tôi đưa ra các trình mô tả sắp xếp đầu tiên, ứng dụng của tôi chạy tốt, nhưng chế độ xem bảng của tôi không được sắp xếp chính xác theo cách tôi muốn. Làm cách nào để sắp xếp chế độ xem bảng dựa trên thuộc tính được tính của lớp con NSManagedObject
trong Swift?
Yêu cầu tìm nạp dữ liệu lõi * không thể * sắp xếp trên thuộc tính được tính, chỉ trên các thuộc tính được lưu trữ liên tục. So sánh (ví dụ) http://stackoverflow.com/questions/13325849/sorting-on-transient-fields-with-nsfetchedresultcontroller. –
Ngoài ra, 'tổng số' của bạn được phỏng đoán là int, vì vậy mức trung bình sẽ sai. Ví dụ. ảnh chụp 1,1,3 = 5/3 = 1. – Mundi