2010-07-08 31 views
5

Tôi mới phát triển trên iPhone, bạn có thể tư vấn cho tôi cách serialize hồ sơ AdressBook không?
Tôi đã đọc stackoverflow - How do I serialize a simple object in iPhone sdk nhưng tôi vẫn có câu hỏi: tôi có nên mở rộng ABRecordRef không? Có thể không? Hoặc tôi nên thực hiện lớp NSObject riêng?IPhone SDK - Làm thế nào để tuần tự hóa ABRecord?

(câu hỏi tương tự là trên Mac forums và bị bỏ lại mà không cần câu trả lời)

Cảm ơn bạn!

Trả lời

12

ABRecord là loại C mờ. Nó không phải là một đối tượng theo nghĩa của Objective-C. Điều đó có nghĩa là bạn không thể mở rộng nó, bạn không thể thêm một thể loại vào nó, bạn không thể nhắn tin nó. Điều duy nhất bạn có thể làm là các chức năng gọi được mô tả trong ABRecord Reference với tham số ABRecord.

Bạn có thể làm hai việc để có thể giữ cho các thông tin được tham chiếu bởi ABRecord arround:

  1. Lấy ABRecords id bởi ABRecordGetRecordID(). ABRecordID được định nghĩa là int32_t, do đó bạn có thể truyền nó vào NSInteger và lưu trữ nó ở bất cứ đâu bạn thích. Sau đó bạn có thể lấy lại hồ sơ từ ABAddressBookGetPersonWithRecordID() hoặc ABAddressBookGetGroupWithRecordID(). Nhưng nhận thức, bản ghi có thể được thay đổi hoặc thậm chí bị xóa bởi người dùng hoặc ứng dụng khác trong khi đó.

  2. Sao chép tất cả các giá trị bên trong bản ghi vào lớp con NSObject tiêu chuẩn và sử dụng NSCoding hoặc các kỹ thuật khác để lưu trữ. Sau đó, bạn sẽ không được hưởng lợi từ những thay đổi hoặc bổ sung đối với hồ sơ mà người dùng có thể đã thực hiện.

Vì lý do bạn có thể kết hợp cả hai cách tiếp cận.

+0

Cảm ơn bạn đã trả lời, điều này mang lại sự hiểu biết! –

+0

rất hữu ích. Tôi đã đấu tranh với một cách của một người trở lại sau khi lưu một bản sao vào dữ liệu cốt lõi ứng dụng của tôi. Vì vậy, điều này đã giúp. – CW0007007

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