Есть ли лучший способ сериализации объектов plist-y в Objective-C?

StackOverflow https://stackoverflow.com/questions/1652479

Вопрос

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

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

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

myObj.ivar = keepThis

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

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

Это было полезно?

Решение 5

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

Другие советы

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

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

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

Возможно, вы захотите посмотреть runtime-in-cocoa-co / 1631611 # 1631611 "> этот вопрос SO , в котором обсуждается помещение экземпляров ivars в словарь во время выполнения.

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top