2011-10-19 30 views
9

Tôi có một lớp mở rộng NSObject. Nó bao gồm một vài biến nổi. Tôi muốn lưu trữ lớp này trong dữ liệu cốt lõi.Cách lưu trữ lớp tùy chỉnh bằng cách sử dụng CoreData

Trong mô hình dữ liệu, Có vẻ như tùy chọn có thể xảy ra nhất là chuyển lớp này thành dữ liệu nhị phân để lưu trữ nó bằng cách sử dụng CoreData.

Điều này có đúng không? Nếu có, ai đó có thể vui lòng hướng dẫn tôi cách lưu trữ và truy xuất lớp của tôi bằng CoreData không?

Cảm ơn,

Trả lời

0

tôi sẽ khuyên bạn nên tạo một Entity mới trong Core Data, mô hình hóa các lĩnh vực này trong thực thể mới, và refactoring mã của bạn để sử dụng các lớp tùy chỉnh mới của đối tượng quản lý.

10

Cách mà bạn có thể làm cho đối tượng tùy chỉnh của mình được lưu và tải một cách minh bạch từ Dữ liệu chính là sử dụng NSValueTransformer. Nếu bạn tạo NSValueTransformer có thể chuyển từ lớp của bạn sang NSData và ngược lại, bạn có thể đánh dấu thuộc tính trong thực thể của bạn tương ứng với lớp này là có thể biến đổi. Sau đó, Core Data sẽ cho phép bạn thiết lập và truy xuất các đối tượng thuộc loại này khi giao dịch với thuộc tính này.

Trong câu trả lời của tôi here Tôi hiển thị mã để biết cách thực hiện điều này với các thuộc tính UIImage, không được hỗ trợ nguyên bản bởi Dữ liệu cốt lõi. Để thực hiện một cái gì đó như thế này cho đối tượng tùy chỉnh của bạn, bạn sẽ cần phải làm cho nó NSCoding tuân thủ và thực hiện các phương thức -encodeWithCoder:-initWithCoder: của riêng bạn để tuần tự hóa nó vào một cá thể NSData để lưu trữ.

Apple có thêm tài liệu về điều này trong phần "Non-Standard Persistent Attributes" của Hướng dẫn lập trình dữ liệu cốt lõi, bao gồm ví dụ sử dụng lớp NSColor của Mac.

+0

Mặc dù tôi nghĩ tốt nhất nên làm như @beryllium đề xuất; Brad có quyền (dĩ nhiên). –

0

Đề xuất đầu tiên của tôi là tạo một thực thể lưu trữ các giá trị này vì các loại đối tượng bạn đang sử dụng được hỗ trợ trong Dữ liệu cốt lõi.

Nếu bạn định thay đổi mô hình này thường xuyên/không muốn xử lý việc di chuyển dữ liệu thì bạn luôn có thể đặt thuộc tính của đối tượng để biến đổi thành kiểu của nó trong mô hình dữ liệu lõi. Sau đó, đảm bảo rằng lớp của bạn triển khai giao thức NSCoding, một khi bạn làm điều này thì nó sẽ hoạt động tốt.

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