2010-03-15 23 views
6

Giả sử tôi có một thực thể cha, mỗi thực thể có một số con. Tôi muốn có được tất cả các bậc cha mẹ được sắp xếp theo số lượng trẻ em của họ. Tương tự như mã giả sau:Dữ liệu chính: Phân loại NSFetchRequest theo số lượng mối quan hệ nhiều-nhiều

NSEntityDescription * entity = [NSEntityDescription entityForName:@"Parent" inManagedObjectContext:managedObjectContext]; 

[[NSSortDescriptor alloc] initWithKey:@"children.count" ascending:NO]; 
//Execute request 

Có cách nào tạo tìm nạp như thế này bằng dữ liệu cốt lõi không? Nếu không có cách nào để làm điều này sẽ phân loại bằng cách sử dụng sortedArrayUsingSelector: mất lợi ích của kích thước lô _PFBatchFaultingArray?

Cảm ơn, Bến

Trả lời

5

truy vấn của bạn sẽ làm việc, nhưng (giả sử children được faulted) sẽ sử dụng giá trị khóa mã hóa các phương pháp trên children tài sản, do đó sẽ bắn lỗi (xem the NSManagedObject docs cho một danh sách các phương pháp kích hoạt lỗi và thảo luận về hành vi này), vì vậy bạn sẽ mất các lợi ích về hiệu suất của việc xử lý theo lô và lỗi.

Bạn có thể xem xét việc duy trì thuộc tính có nguồn gốc trên thực thể mẹ của bạn (gọi là childrenCount) phản ánh số lượng trẻ em có liên quan đến cha mẹ, nếu điều này khả thi cho trường hợp của bạn. Nó không phải là giải pháp sạch nhất, nhưng nếu bạn giữ nó như là một NSNumber trong thực thể cha mẹ bạn sẽ có quyền truy cập vào nó ngay cả khi children bị lỗi và bạn có thể sắp xếp nó trực tiếp.

+1

KVC '@ count' sẽ được thực hiện trên' NSSet' không phải là các đối tượng bên trong 'NSSet' đó và do đó không gây ra lỗi. –

+0

Nó gây ra lỗi do cháy, vì Core Data không gây lỗi cho từng đối tượng riêng lẻ - nó tự đặt lỗi cho chính thiết lập (hay đúng hơn là một lớp con cụ thể của NSSet). Xem http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CoreData/Articles/cdFaultingUniquing.html#//apple_ref/doc/uid/TP30001202, trong "Giới hạn lỗi kích thước của biểu đồ đối tượng" . – Tim

+3

Mọi thứ có thay đổi kể từ đó không? iOS 7 ném ngoại lệ cho loại sắp xếp này: *** Chấm dứt ứng dụng do ngoại lệ không nắm bắt 'NSInvalidArgumentException', lý do: 'nhiều khóa không được phép ở đây' *** Lệnh gọi đầu tiên: – an0

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