2009-07-04 19 views
7

Tôi chỉ mới bắt đầu với việc sử dụng Dữ liệu cốt lõi trên SDK iPhone và tôi đang xem xét lưu một danh sách có thứ tự, giống như một mảng. Tuy nhiên, các mối quan hệ trong Dữ liệu chính được biểu diễn dưới dạng Bộ khi được truy xuất. Điều này làm cho nó khó khăn để lưu thứ tự trong đó các đối tượng được định vị.Các mối quan hệ được lập chỉ mục trong dữ liệu chính

Ví dụ điển hình là các mục dữ liệu trong chế độ xem bảng khi cho phép sắp xếp lại các mục. Một giải pháp dễ dàng sẽ bao gồm một thuộc tính chỉ mục trên đối tượng được quản lý.

Hãy xem xét các hệ thống phân cấp như sau:

Document < -Nhiều-to-many-> DataItem

trường hợp tài liệu khác nhau có thể liên kết đến các DataItem giống nhau, và mỗi tài liệu có thể tham khảo một hoặc nhiều DataItem (s) . Do đó, việc có một thuộc tính chỉ mục trong DataItem sẽ dẫn đến khả năng sử dụng lại ít hơn của cá thể đó, tức là bạn chỉ có thể lưu chỉ mục cho một cá thể Tài liệu.

Bất kỳ ý tưởng nào về cách tôi có thể trình bày thứ bậc được sắp xếp gọn gàng trong chế độ xem bảng nhưng vẫn giữ cho mỗi cá thể DataItem có thể sử dụng lại được? Cảm ơn!

Trả lời

3

Một giải pháp tốt là giữ cấu trúc dữ liệu riêng biệt trong Tài liệu để ánh xạ các DataItems đến một vị trí trong chế độ xem bảng. Bên cạnh việc cho phép cùng một DataItem tồn tại ở nhiều vị trí, nếu bạn cần thêm một DataItem vào nhiều tài liệu thì giải pháp này cũng sẽ hoạt động.

Quay lại khi tôi đang xem xét các chiến lược khác nhau về việc giữ các đối tượng Dữ liệu cốt lõi, tôi đã tìm thấy blog post giải thích cách thực hiện điều này một cách chi tiết, bao gồm cả mã mẫu.

7

Bạn có thể làm điều đó với tổ chức khác, như thế này: alt text http://gallery.me.com/davedelong/100084/Screenshot-20on-202009-07-04-20at-2010-34-56-20AM/web.jpg?ver=12467253090001

Một tài liệu có thể tìm thấy dataItems thực tế của nó bằng cách sử dụng một cái gì đó như thế này:

NSSet * documentDataItems = [[document orderedDataItems] valueForKey:@"dataItem"]; 

Tương tự như vậy, một DataItem thể tìm thấy tất cả các tài liệu của nó bằng cách thực hiện tương tự:

NSSet * dataItemDocuments = [[dataItem orderedPositions] valueForKey:@"document"]; 
+0

Hình ảnh có vẻ bị hỏng. –

+0

@BJ Homer - cảm ơn; Rõ ràng twitpic không thích liên kết tĩnh. Tôi đã tải nó lên MobileMe. –

15

Kể từ OS X Lion (10.7), điều này bây giờ trở nên đơn giản hơn rất nhiều. Hiện tại, Cocoa đã hỗ trợ một lớp NSOrderedSet mới tương thích với Dữ liệu cốt lõi. Chức năng này cũng có sẵn trong iOS mặc dù yêu cầu iOS 5.0 trở lên. Điều này có nghĩa là bạn không thể sử dụng tính năng này nếu bạn muốn ứng dụng của mình tương thích ngược với các phiên bản iOS hoặc OS X trước đó.

Tất cả những gì bạn cần làm để đạt được thứ tự là mở trình chỉnh sửa mô hình Dữ liệu cốt lõi, chọn -quan hệ và kiểm tra hộp kiểm "đặt hàng".

+0

Bạn có biết bất kỳ tài liệu nào về API mới này không? Tôi đã chỉ nhìn thấy nó chính thức được thảo luận trong các ghi chú phát hành. Ví dụ, tôi muốn tìm hiểu về việc hiển thị các bản ghi theo thứ tự này trong một Bảng Xem – Dov

+0

Có liên kết trong câu trả lời ban đầu của tôi cho tham chiếu lớp của NSOrderSet. Tuy nhiên, tôi không biết bất cứ điều gì đặc biệt liên quan đến các trường hợp sử dụng tốt nhất trong khung nhìn bảng. –

+1

'NSOrderedSet' hiện không thể được sử dụng cùng với iCloud. –

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