代码之家  ›  专栏  ›  技术社区  ›  andyvn22

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

  •  4
  • andyvn22  · 技术社区  · 14 年前

    我试图创建nscoder的一个子类,但我真的不知道从哪里开始。 Apple's documentation 列出哪些方法是必需的,但其他方法不多。也许我的google fu很弱,但是我找不到任何实现的例子,例如。 encodeValueOfObjCType:at: 在任何地方。(尽管我认为这涉及到很多案例。)

    任何人都知道nscoder的一个样本子类,或者知道 对象类型的编码值:位于: decodeValueOfObjCType:at: 应该看起来像?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Olotiar    11 年前

    我刚刚公开了一个 NSCoder 子类 here 它基本上是不推荐使用的 NSArchiver . 应该让任何一个陷入这个问题的人开始。

        2
  •  1
  •   Community basarat    7 年前

    我还想(ab)使用nscoder生成比nskeyedarchiver生成的更简单的xml,并为它实现了一些类。这些类被称为 RWPlainXMLTreeEncoder RWPlainXMLTreeDecoder ,我已经写了 some test code for them 也是。

    rwPlainXmlTreeEncoder假设您正在编码的对象图是一棵树(如果同一个对象被编码两次,则解码后的树将包含两个不同的副本,而不是一个共享副本;如果您尝试对循环图进行编码,则会引发异常)。对于每个编码对象,它生成一个xml元素,该元素与本例中的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>
    

    但我不确定我是否会继续努力。我的总体目标是有一个相当通用的、简单的方法将对象树保存到一个文件中,该文件利用 用编码器编码: 我已经编写了方法,同时生成的文件不像使用nskeyedarchiver时那样依赖于cocoa。这将允许其他人编写在其他平台上打开这些文件的应用程序。

    但我现在明白了 similar efforts 它可能已经更高级了,而且,由于XML是一种文档标记语言,它可能不是最好的目标格式 non-markup language 可能更合适。

    尽管如此,如果您想继续这样做,或者有其他理由查看一个相当简单的nscoder子类,可以使用我的代码。你也可以看看 MAKeyedArchiver . 哦,而且我的代码包含在bsd样式的许可证中(至少是 SVN revision 424 是的,我可能会在以后的版本中更改此项)。欢迎改进和反馈。