2010-10-14 21 views
7

Tôi muốn nhóm các kết quả của một thực thể NSFetchRequest. Các thực thể đều chia sẻ cùng một phần tử trừu tượng. Ví dụ:Có thể sắp xếp theo các lớp con trong `NSFetchRequest` mà không thêm thuộc tính bổ sung?

animal 
| 
|-cat 
| 
|-dog 

Các NSFetchRequest đã includesSubentities thiết TRUEentity thiết lập để animal. Có thể đặt sectionNameKeyPath của NSFetchedResultsController thành entity.name nhưng không thể thực hiện tương tự với sortDescriptors của NSFetchRequest do thực tế là sortDescriptors được áp dụng cho các thuộc tính được lưu trữ (tức là dữ liệu trong cơ sở dữ liệu, chứ không phải các phương thức trong lớp). Do đó, cách duy nhất để nhóm theo loại thực thể là thêm một thuộc tính vào lớp cha mà các lớp con có thể sử dụng để xác định chính chúng.

Điều này có vẻ điên rồ vì nó làm suy yếu tính hữu ích của kế thừa. Tôi đã có một cái nhìn trong cơ sở dữ liệu SQLite và loại thực thể được lưu trữ trong cùng một bảng như các thuộc tính để dữ liệu cần thiết đã được đưa ra.

Tóm lại: Có thể sắp xếp theo các lớp con trong một số NSFetchRequest mà không thêm thuộc tính bổ sung?

+0

Bạn đã bao giờ tìm thấy câu trả lời cho câu hỏi này chưa? – epologee

+0

@epologee. Không, tôi không tìm được giải pháp. Tôi nghĩ điều tốt nhất cần làm là sắp xếp lại 'fetchedResultsController.sections' hoặc không sử dụng' NSFetchedResultsController'. –

+0

Tôi đã sử dụng nhiều phiên bản NSFetchedResultsController, một cho mỗi thực thể: S. Yêu thích câu hỏi nếu có ai đó tìm thấy câu trả lời cho câu hỏi đó. Chúc mừng. – epologee

Trả lời

2

Tôi nghĩ câu trả lời là không.

Tìm nạp và sắp xếp xảy ra trong Cửa hàng (đối với cửa hàng SQLLite), vì vậy các thuộc tính cần phải là một phần của mô hình dữ liệu. Từ hướng dẫn lập trình dữ liệu cốt lõi (Tính năng lưu trữ liên tục):

Có một số tương tác giữa tìm nạp và loại cửa hàng. Trong các cửa hàng XML, nhị phân và trong bộ nhớ, việc đánh giá các biến vị ngữ và các bộ mô tả sắp xếp được thực hiện trong Objective-C với quyền truy cập vào tất cả các chức năng của Cocoa, bao gồm cả các phương thức so sánh trên NSString. Mặt khác, cửa hàng SQL biên dịch biến vị ngữ và các bộ mô tả sắp xếp thành SQL và đánh giá kết quả trong chính cơ sở dữ liệu đó. Điều này được thực hiện chủ yếu cho hiệu suất, nhưng nó có nghĩa là việc đánh giá diễn ra trong môi trường không phải là Cocoa, và do đó các bộ mô tả sắp xếp (hoặc các biến vị ngữ) phụ thuộc vào Cocoa không thể làm việc.

cũng

Bên cạnh đó bạn không thể sắp xếp trên các thuộc tính thoáng qua sử dụng các cửa hàng SQLite.

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