Как сериализовать объект в NSDictionary? - PullRequest
0 голосов
/ 22 марта 2012

Я хочу сериализовать объект в NSDictionary.

(ключ = значение) будет (имя-свойства = значение-свойства)

Если свойство является другим объектом, оно будет рекурсивно сериализовано как другой NSDictionary внутри родительского NSDictionary.

У кого-нибудь есть идея? API? Указатель? Отражение? рамки?

Спасибо!

Ответы [ 2 ]

1 голос
/ 22 марта 2012

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

Еще одна распространенная альтернатива - список свойств. Это более простой и переносимый формат с некоторыми ограничениями на типы. А именно, NSString, NSArray, NSDictionary, NSNumberCFBoolean), NSData и NSDate - а также их аналоги CoreFoundation. Эти типы и коллекции знают, как правильно сериализовать свои элементы. Здесь вы можете использовать NSPropertyListSerialization для архивирования и разархивирования. Это не слишком много для небольших задач, но NSCoding, как правило, является лучшим долгосрочным решением, где переносимость не имеет значения (например, экспорт в XML), поскольку объекты могут поддерживать свои реализации сериализации без особого вмешательства со стороны архиватора.

Для пользовательских объектов обычно поддерживается представление списка свойств и / или NSCoding - но типы коллекций уже знают, как архивировать и разархивировать себя (при условии, что их содержимое также поддерживает подход к сериализации, который вы используете) .

Более подробную информацию можно найти в Apple * Руководство по программированию архивов и сериализаций .

1 голос
/ 22 марта 2012

Для каких целей вам нужно превратить объект в словарь?

Если вы хотите сохранить объект в файл, вы должны взглянуть на протокол NSCoder, который вы можете реализовать для своего объекта, чтобы массив ваших объектов (например) мог быть сериализован встроенными методами.как -ArriteToFile NSArray: атомно:.

...