NSCoder的样本(最好是简单的)子类?

时间:2010-02-27 22:59:16

标签: objective-c subclassing nscoder

我正在尝试创建NSCoder的子类,但我真的不知道从哪里开始。 Apple's documentation列出了所需的方法,但没有其他方法。也许我的Google-fu很弱,但我找不到任何实施例子,例如: encodeValueOfObjCType:at:,任何地方。 (虽然我认为它涉及很多案例。)

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

2 个答案:

答案 0 :(得分:1)

我一直希望(ab)使用NSCoder生成比NSKeyedArchiver生成的更简单的XML,并为其实现了一些类。这些类名为RWPlainXMLTreeEncoderRWPlainXMLTreeDecoder,我也写过some test code for them

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:方法的文件,同时生成一个不像Cocoa一样的文件。的NSKeyedArchiver。这将允许其他人编写在其他平台上打开这些文件的应用程序。

但我现在已经明白已经有similar efforts可能已经更高级,而且,XML是一种文档标记语言,它可能不是最好的目标格式而是{{3可能更适合。

然而,如果你想继续这个或者有其他理由去看一个相当简单的NSCoder子类,请随意使用我的代码。您还可以查看non-markup language。哦,我的代码由BSD风格的许可证覆盖(至少MAKeyedArchiver中的版本是,我可能会在以后的版本中更改它)。欢迎改进和反馈。

答案 1 :(得分:1)

我刚开源NSCoder子类here 它基本上是已弃用的NSArchiver的副本。 应该让任何绊倒这个问题的人开始。