Есть ли лучший способ сериализации объектов plist-y в Objective-C?
-
22-07-2019 - |
Вопрос
Мне нравится возможность сериализации 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]
.