Я также хотел (а) использовать NSCoder для генерации более простого XML, чем то, что производит NSKeyedArchiver, и реализовал некоторые классы для него. Классы называются RWPlainXMLTreeEncoder и RWPlainXMLTreeDecoder , и я написал некоторый тестовый код для них тоже.
RWPlainXMLTreeEncoder предполагает, что кодируемый вами объектный граф является деревом (если один и тот же объект кодируется дважды, декодированное дерево будет содержать две разные копии вместо одной общей копии; если вы попытаетесь закодировать циклический граф, оно вызывает исключение). Для каждого закодированного объекта он генерирует элемент XML, который выглядит примерно так же, как в этом примере, кодировку массива, содержащего строку «Строка»:
<ROOT type="@NSArray"><NS.object.0 type="@NSString"><NS.bytes>4120737472696E67</NS.bytes></NS.object.0></ROOT>
Я хотел еще больше улучшить вышеупомянутое, используя другой метод вместо собственного encodeWithCoder:
объекта для таких объектов, как массивы и строки, так что выше будет:
<ROOT type="array"><item.0 type="string">A string</item.0></array></ROOT>
Однако я не уверен, буду ли я продолжать работать над этим. Моя общая цель состояла в том, чтобы иметь довольно общий и простой способ сохранения дерева объектов в файл, который использует методы, которые я уже написал encodeWithCoder:
, при этом создавая файл, который не зависит от Какао, как при использовании NSKeyedArchiver. Это позволило бы другим писать приложения, открывающие эти файлы на других платформах.
Но теперь я понял, что были предприняты аналогичные усилия , которые в любом случае уже могут быть более продвинутыми, и более того, поскольку XML является языком разметки документов, он может быть не лучшим целевым форматом, а некоторые язык без разметки может быть лучше.
Тем не менее, если вы хотите продолжить с этим или у вас есть другая причина взглянуть на довольно простой подкласс NSCoder, не стесняйтесь использовать мой код. Вы также можете взглянуть на MAKeyedArchiver . Да, и мой код защищен лицензией в стиле BSD (по крайней мере, версия, которая в SVN ревизия 424 , есть, я мог бы изменить это для будущих версий). Улучшения и отзывы приветствуются.