4

我正在尝试创建 NSCoder 的子类,但我真的不知道从哪里开始。Apple 的文档列出了需要哪些方法,但仅此而已。也许我的 Google-fu 很弱,但我找不到任何实现的例子,例如encodeValueOfObjCType:at:,任何地方。(虽然我认为它涉及很多案例。)

encodeValueOfObjCType:at:任何人都知道我可以查看的 NSCoder 示例子类,或者知道一两个案例decodeValueOfObjCType:at:应该是什么样子?

4

2 回答 2

2

我只是在这里开源了一个NSCoder子类, 它基本上是已弃用的. 应该让任何偶然发现这个问题的人开始。NSArchiver

于 2014-01-06T11:22:53.233 回答
1

我也一直想(ab)使用 NSCoder 来生成比 NSKeyedArchiver 生成的更简单的 XML,并为它实现了一些类。这些类称为RWPlainXMLTreeEncoderRWPlainXMLTreeDecoder,我也为它们编写了一些测试代码

RWPlainXMLTreeEncoder 假设您正在编码的对象图是一棵树(如果同一个对象被编码两次,解码后的树将包含两个不同的副本而不是一个共享副本;如果您尝试对循环图进行编码,则会引发异常) . 对于每个编码对象,它会生成一个 XML 元素,该元素看起来与本示例中的元素大致相似,即包含字符串“A string”的数组的编码:

<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 时那样依赖 Cocoa。这将允许其他人编写在其他平台上打开这些文件的应用程序。

但我现在开始明白,已经有类似的努力可能已经更先进了,此外,由于 XML 是一种文档标记语言,它可能不是最好的目标格式,某些非标记语言可能更适合。

尽管如此,如果你想继续这个或有其他理由查看一个相当简单的 NSCoder 子类,请随意使用我的代码。你也可以看看MAKeyedArchiver。哦,我的代码包含在 BSD 样式的许可证中(至少SVN 修订版 424中的版本是,我可能会在以后的版本中更改它)。欢迎改进和反馈。

于 2010-04-01T15:07:18.793 回答