2015-05-08 19 views
6

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?

+4

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. –

+0

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

Trả lời

3

Như đã được chỉ ra bởi Martin, bạn không thể sắp xếp trên thuộc tính được tính toán. Chỉ cần cập nhật tài sản mới được lưu trữ của câu lạc bộ mỗi lần chụp.

Các vấn đề liên quan