如何将Objective C textual(po)表示转换为真实对象

时间:2010-03-10 21:42:00

标签: iphone objective-c serialization

在xcode中,您可以使用po对象查看给定对象的文本表示。是否可以将此文本表示转换为真正的客观c对象?

由于

3 个答案:

答案 0 :(得分:6)

我想你可以解析出地址,将它分配给指针,并从内存中检索对象,但 是一个可怕的坏想法,你永远不应该这样做

真正的问题:你想做什么?

答案 1 :(得分:1)

我有一个可以激励你的项目,它在GitHub及其名为NDJSON。基本上,它使用运行时内省来获取对象具有的属性,并使用相同值的json键设置这些属性。您可以执行类似的操作但获取属性值而不是设置。为了帮助无法确定类型的类型,如集合中的对象类型或将json键映射到不同命名的属性,我已经定义了一个非正式协议,它有一些方法可以返回字典映射json键到属性名称或者用于属性名称的类,还有一种方法可以返回要忽略的json键列表,或者是唯一可以接受的键。如果你在git hub上查看我的code,就会有一个名为NDJSONDeserializer的类,它包含这个逻辑。有一个名为getTypeNameFromPropertyAttributes()的函数,它解析出你想要查看的Apples运行时方法property_getAttributes()的字符串结果。

答案 2 :(得分:0)

不,您从po <instance>看到的代表是-[<instance> debugDescription]的结果,默认情况下会返回-[<instance> description],如http://developer.apple.com/mac/library/technotes/tn2004/tn2124.html中所述。

除非您正在处理的实例恰好提供了自身的序列化形式的描述,否则您就是SOL。大多数对象都没有。

真正的问题,正如戴夫指出的那样,你想做什么? po仅适用于gdb控制台,因此我认为这是一个调试问题。在这种情况下,您是否知道gdb控制台支持向实例发送消息?所以你可以这样做:

po [<myInstance> methodReturningAnOtherObject]

po [<myInstance> valueForKeyPath:@"some.long.key.path"]

从调试器控制台中跟踪对象图。