2010-03-26 34 views
10

Vì vậy, hãy nói rằng tôi có một cửa hàng cha mẹ và cha mẹ có mối quan hệ một với nhiều trẻ em (parent.children) và tất cả chúng đều có tên. Bây giờ, trên tìm nạp ban đầu cho cha mẹ tôi có thể chỉ định một descriptor sắp xếp để có được chúng trở lại theo thứ tự của tên đầu tiên, nhưng làm thế nào tôi có thể yêu cầu trẻ em theo thứ tự? Nếu tôi thực hiện một [parent.children allObjects], nó chỉ cung cấp cho họ trở lại trong một mớ hỗn độn và tôi phải sắp xếp sau sự kiện, mọi lúc.Dữ liệu cốt lõi, sắp xếp các đối tượng con một đến nhiều

Cảm ơn, Sam

Trả lời

11

Sam,

Nếu tôi đọc câu hỏi của bạn một cách chính xác, bạn muốn thiết lập một lấy mà trả về một danh sách sắp xếp của những đứa trẻ của một phụ huynh cụ thể. Để thực hiện việc này, tôi sẽ thiết lập tìm nạp cho các thực thể "trẻ em" và sau đó sử dụng vị từ để giới hạn kết quả:

NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease]; 
[request setEntity:[NSEntityDescription entityForName:@"children" inManagedObjectContext:moc]]; 
[request setSortDescriptors:[NSArray initWithObject:[[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES]]; 
[request setPredicate:[NSPredicate predicateWithFormat:@"(parent == %@)", parent]]; 

Rõ ràng là tên tổ chức và thuộc tính của bạn có thể khác nhau. Trong dòng cuối cùng, biến mẹ phải là một tham chiếu đến cá thể NSManagedObject của cha mẹ có con bạn muốn.

+0

tôi thấy, bạn đang đề xuất chạy lấy thay vì chỉ sử dụng các lỗi trong CoreData? Điều đó có kém hiệu quả hơn không? tức là thiết lập một tìm nạp với vị từ và chạy nó đắt hơn chỉ làm [parent.children allObjects] và để cho managedObject lấp đầy lỗi? – Shizam

+0

Tôi nghĩ rằng bạn là chính xác rằng chạy một yêu cầu tìm nạp hoàn toàn mới sẽ chậm hơn làm đầy lỗi với [parent.children allObjects] và sau đó sắp xếp NSArray mà bạn nhận được. Trong tâm trí của tôi, lợi thế của yêu cầu tìm nạp mới là bạn có thể sử dụng NSFetchedResultsController để giữ cho tập kết quả được cập nhật và sắp xếp (nghĩa là nếu bạn tạo một con mới của cha, nó sẽ tự động chèn nó vào danh sách kết quả) . Nếu bạn có kế hoạch giữ danh sách trẻ em trong khoảng thời gian và danh sách có thể thay đổi (nghĩa là bạn đang hiển thị danh sách có thể chỉnh sửa), tôi sẽ sử dụng chiến lược này. –

16

Nếu bạn chỉ muốn sử dụng một NSArray, và không phải là một NSFetchedResultsController, có một cách khác:

NSSortDescriptor *alphaSort = [NSSortDescriptor sortDescriptorWithKey:@"firstName" ascending:YES]; 
NSArray *children = [[parent.children allObjects] sortedArrayUsingDescriptors:[NSArray arrayWithObject:alphaSort]]; 
+0

Shosti - cuộc gọi 'allObjects' trên mối quan hệ nhiều-nhiều có đảm bảo rằng tất cả các đối tượng trong mối quan hệ đó bị lỗi và bây giờ trong bộ nhớ nếu trước đó không? Đôi khi thực thể cha mẹ được tìm nạp mà không cần tìm nạp các mối quan hệ mong muốn, và sau đó, chúng tôi muốn tất cả các trẻ em (các đối tượng có liên quan đến) có mặt. Tôi tự hỏi, nếu đó là đảm bảo luôn luôn đi tất cả các lỗi trong mối quan hệ cụ thể đó. – idStar

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