2010-06-30 33 views
22

Tôi đang làm việc trên một ứng dụng iPhone và trong một chế độ xem cụ thể, tôi cần tải hai thực thể khác nhau: Một đối tượng sẽ điền UITableView và một đối tượng khác sẽ điền UITextView.Dữ liệu cốt lõi: NSFetchedResultsController có thể tìm nạp hai thực thể khác nhau không?

Có thể tìm nạp cả hai thuộc tính bằng một đơn NSFetchedResultsController không?

Hoặc tôi có cần sử dụng hai khác nhau NSFetchedResultsController s không?

Bất kỳ ý tưởng nào về cách tiếp cận tốt nhất vấn đề này?

+0

Bạn có thể cụ thể hơn về cách thiết lập mô hình của mình không? Có mối quan hệ nào giữa hai thực thể không? Nếu vậy, bạn có thể chỉ cần đi qua các mối quan hệ để có được các giá trị bạn cần mà không làm hai lần tải. – Alex

+0

Hi Alex, hai thực thể không liên quan. Nó được thiết lập như sau: * Pháp nhân "Item_comment" đại diện cho các nhận xét mà tôi muốn hiển thị trong UITableView. Người dùng có thể nhấn vào bất kỳ số nào trong số những nhận xét đó để lưu trữ chúng. * Pháp nhân "Inspection_data" đại diện cho bản ghi của văn bản Nhận xét mặt hàng (không phải là thực thể, mà chỉ là văn bản của thực thể đó). Văn bản của bản ghi mà tôi muốn hiển thị trong UITextView. – futureshocked

+2

Cách duy nhất để nhận nhiều loại thực thể được trả về trong một yêu cầu tìm nạp đơn là nếu cả hai đều được kế thừa từ một thực thể cha mẹ chung và bạn đặt thực thể tìm nạp thành cấp độ gốc. –

Trả lời

15

Mỗi yêu cầu tìm nạp chỉ có một thực thể và mỗi bộ điều khiển kết quả được tìm nạp chỉ có một lần tìm nạp. Vì vậy, bạn cần bộ điều khiển riêng biệt cho từng thực thể.

Nếu bạn nghĩ về điều đó, làm cách nào bạn tạo một vị từ để tìm nạp hai thực thể riêng biệt hợp lý?

Có thể bạn không cần hai lần tải. Trong hầu hết các trường hợp, bạn có thể tìm nạp các thực thể cư trú trong bảng và sau đó sử dụng mối quan hệ cho thực thể của hàng đã chọn để điền một số thứ như chế độ xem văn bản.

+2

Cảm ơn. Tôi đã thêm bộ điều khiển tìm nạp thứ hai, đảm bảo rằng nó không có đại biểu và nó hoạt động chính xác như dự định. Vì tôi không cần thực hiện bất kỳ hành động nào khi bộ điều khiển tìm nạp thứ hai đã trả về kết quả của nó, tôi không cần phải nghe các thay đổi. – futureshocked

+3

Sẽ không có vấn đề gì khi bạn cần phải nghe những thay đổi. Bạn chỉ cần làm một so sánh cho mỗi phương pháp đại biểu. if (controller == self.entity1FetchedResultsController) {...} else {...} –

+0

Tôi có một tình huống mà tôi có hai thực thể phân lớp siêu thực thể. Trong trường hợp này, tìm nạp sẽ có thể lấy tất cả chúng trong một bộ điều khiển. Sau đó bạn cần phải sắp xếp trên một số thuộc tính phổ biến và kiểm tra loại lớp để xác định hiển thị ô. –

8

Như TechZen đã nêu, câu trả lời là không.

Tuy nhiên, bạn có thể theo dõi các lưu của chính mình và phản ứng với các lần lưu đó. Nếu bạn thực sự cần xem nhiều hơn một thực thể (cái gì đó phổ biến hơn trên iPad so với iPhone) thì hãy thêm một người quan sát NSNotification trên NSManagedObjectContextDidSaveNotification và xem số -userInfo của số NSNotification quay lại. Sau đó, bạn có thể chạy các vị từ trên các kết quả để xác định xem bạn có cần cập nhật hiển thị của mình hay không. Đó là những gì mà NSFetchedResultsController đang thực hiện dưới danh sách.

2
The quick answer is NO. But I found a creative answer. 

Trong bảng của bạnViewController, tạo thanh tìm kiếm có bao nhiêu phạm vi bạn có.

Khi phạm vi khác được chọn, bạn có thể tìm nạp các thực thể khác nhau!

Điều này hoạt động vì tôi đã tạo một ứng dụng như thế này!

Người dùng cũng sẽ dễ dàng tách biệt hai dữ liệu khác nhau!

1

Giải pháp tốt nhất là tái cấu trúc Mô hình của bạn và xem liệu 2 thực thể của bạn có điểm chung nào không. Bạn có thể tạo một thực thể trừu tượng cho các công cụ giao nhau, sau đó kế thừa 2 thực thể của bạn ra khỏi đó. Thực hiện tìm nạp trên thực thể trừu tượng và bộ điều khiển kết quả tìm nạp của bạn sẽ trả lại kết quả hỗn hợp.

+0

đó là một ý tưởng hay nhưng không may Apple cho phép chúng tôi bằng cách thực hiện các thực thể con tất cả trong một bảng khổng lồ. – malhal

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