Образец (желательно простой) подкласса NSCoder? - PullRequest
4 голосов
/ 28 февраля 2010

Я пытаюсь создать подкласс NSCoder, но я действительно не знаю, с чего начать. Документация Apple перечисляет, какие методы требуются, но не более того. Может быть, мой Google-фу слаб, но я не могу найти примеры реализации, например, encodeValueOfObjCType:at:, где угодно. (Хотя я предполагаю, что это включает много случаев.)

Кто-нибудь знает пример подкласса NSCoder, на который я могу посмотреть, или у меня есть представление о том, как должен выглядеть случай или два из encodeValueOfObjCType:at: и decodeValueOfObjCType:at:?

Ответы [ 2 ]

1 голос
/ 06 января 2014

Я просто с открытым исходным кодом NSCoder подкласс здесь Это в основном реплика устаревшего NSArchiver. Должен ли кто-нибудь, кто сталкивался с этим вопросом, начать.

1 голос
/ 01 апреля 2010

Я также хотел (а) использовать 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 , есть, я мог бы изменить это для будущих версий). Улучшения и отзывы приветствуются.

...