IPhone SDK - Как сериализовать ABRecord? - PullRequest
5 голосов
/ 08 июля 2010

Я новичок в разработке для iPhone, можете ли вы посоветовать мне, как сериализовать записи AdressBook?
Я прочитал stackoverflow - Как мне сериализовать простой объект в iPhone SDK , но у меня все еще есть вопросы: я должен расширить ABRecordRef? Является ли это возможным? Или я должен реализовать собственный класс NSObject?

(аналогичный вопрос был на форумах Mac и остался без ответа)

Спасибо!

1 Ответ

12 голосов
/ 08 июля 2010

ABRecord - непрозрачный тип C. Это не объект в смысле Objective-C. Это означает, что вы не можете расширить его, вы не можете добавить категорию, вы не можете отправить сообщение. Единственное, что вы можете сделать, это вызвать функции, описанные в Справочник ABRecord с ABRecord в качестве параметра.

Вы можете сделать две вещи, чтобы сохранить информацию, на которую ссылается ABRecord arround:

  1. Получите идентификатор ABRecords по ABRecordGetRecordID(). ABRecordID определен как int32_t, так что вы можете привести его к NSInteger и сохранить его где хотите. Позже вы можете получить запись обратно из ABAddressBookGetPersonWithRecordID () или ABAddressBookGetGroupWithRecordID(). Но помните, что запись может быть изменена или даже удалена пользователем или другим приложением.

  2. Скопируйте все значения внутри записи в стандартный подкласс NSObject и используйте NSCoding или другие методы для его сохранения. В этом случае вы не сможете воспользоваться изменениями или дополнениями к записи, которую мог внести пользователь.

Конечно, вы можете комбинировать оба подхода.

...