【问题标题】:How to serialize an object to an NSDictionary?如何将对象序列化为 NSDictionary?
【发布时间】:2012-03-22 19:10:01
【问题描述】:

我想将一个对象序列化为一个 NSDictionary。

(key = value) 将是 (property-name = property-value)

如果一个属性是另一个对象,它将被递归序列化为父 NSDictionary 中的另一个 NSDictionary。

有人有想法吗?应用程序接口?指针?反射?框架?

谢谢!

【问题讨论】:

  • 这里有一个指针:void *(*(*foo)())(char *)

标签: iphone serialization nsdictionary


【解决方案1】:

出于什么目的需要将对象转换为字典?

如果要将对象保存到文件中,您应该查看 NSCoder 协议,您可以为您的对象实现该协议,以便您的对象数组(例如)可以通过 NSArray 等内置方法进行序列化 - writeToFile:原子地:。

【讨论】:

  • 感谢您的回答!我有一个要序列化为 NSDictionary 的对象,因为我将它的键和值添加到 GET 请求参数中。
  • 也许你真正想要的是你的对象上的一个方法,它只生成一个 NSDictionary 供你使用......
【解决方案2】:

采用NSCoding 肯定是一种选择——基本上,您的图形元素都需要知道如何对自己进行序列化/反序列化(通过采用NSCoding)。在这种方法下,您将使用NSCoder 接口进行归档和取消归档。

另一种常见的替代方法是属性列表。这是一种更简单、更便携的格式,但对类型有一些限制。即NSStringNSArrayNSDictionaryNSNumber(和CFBoolean)、NSDataNSDate - 以及它们的CoreFoundation 对应物。这些类型和集合都知道如何适当地序列化它们的元素。在这里,您可以使用NSPropertyListSerialization 进行归档和取消归档。对于较小的任务,这并没有太多开销,但NSCoding 通常是一个更好的长期解决方案,可移植性不是问题(例如导出为 XML),因为对象可以维护其序列化实现而无需存档器的太多干预。

对于自定义对象,您通常会支持属性列表表示和/或NSCoding - 但集合类型已经知道如何归档和取消归档(当然,前提是它们的内容也支持您使用的序列化方法) .

更多详情可以在 Apple 的“Archives and Serializations Programming Guide”中找到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-03
    • 2019-03-04
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    相关资源
    最近更新 更多