Есть ли лучший способ сериализации объектов plist-y в Objective-C? - PullRequest
3 голосов
/ 31 октября 2009

Мне нравится возможность сериализации plist для небольших коллекций объектов: это просто, хранилище - это XML и т. Д. Но я нахожу значения настроек в словарях громоздкими:

[myDict setObject:keepThis forKey:@"ivar"];

Я бы предпочел использовать объект, полученный из классов (или даже просто структур):

myObj.ivar = keepThis

... а затем отправьте сообщение в коллекцию, чтобы получить список. Классы / структуры, используемые для этой цели, могут быть ограничены, чтобы они могли легко и просто отображать примитивы plist; например, myObj может быть сопоставлен с NSDictionary, и на ивары может быть наложено требование, чтобы они были одним из примитивов plist.

Кто-то уже построил оборудование для этого, или я должен сделать свой собственный?

Ответы [ 5 ]

5 голосов
/ 31 октября 2009

Я не уверен, что это именно то, о чем вы говорите, но Кодирование значения ключа , среди прочего, позволит вам получить словарь со значениями из данных экземпляра, а также набор данных экземпляра из словаря .

Существует также способ запросить у экземпляра список его атрибутов , хотя, оказывается,что вы должны написать код самостоятельно, чтобы это работало.(Тем не менее, вы можете использовать самоанализ времени выполнения для реализации этого, если хотите.) РЕДАКТИРОВАТЬ 2 января 2011 г .: -[NSObject attributeKeys] больше не появляется в документации iOS.Я отредактировал ссылку, чтобы указать на документацию Mac, но учтите, что это может быть только вариант на этой платформе.

(Протокол NSCoding - это еще один способваши объекты хранят / восстанавливают сами, но хранилище является двоичным, а не XML, и вы по-прежнему несете ответственность за получение / размещение каждого значения, которое вас волнует, когда система запрашивает это.)

3 голосов
/ 31 октября 2009

Возможно, вы захотите проверить этот вопрос SO , в котором обсуждается помещение ивара экземпляра в словарь во время выполнения.

2 голосов
/ 31 октября 2009

интересный проект. Руководство по программированию Objective-C 2.0 содержит раздел о функциях времени выполнения для динамического получения списка свойств класса:

objc_property_t *class_copyPropertyList(Class cls, unsigned int *outCount)

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

0 голосов
/ 21 ноября 2009

Я видел это опубликовано в другом месте, но это именно то, что я искал. Ответы выше указывают на сырые ингредиенты, но вот они, все завернутые: http://retaincount.com/blog/?p=7

0 голосов
/ 31 октября 2009

Для того чтобы использовать свойства для этого, вам необходимо иметь предопределенный набор возможных ключей. Вы не можете использовать произвольные имена с точечным синтаксисом - это должно быть известное свойство или метод доступа первого операнда. Так что не может быть общей формы этого. Но если вы делаете один из своих собственных, превращение в словарь так же просто, как делать [self dictionaryWithValuesForKeys:listOfProperties].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...