我知道这可能听起来像一个愚蠢的问题,因为它在大多数现代IDE中都是一个微不足道的功能,但我正在深入研究iOS开发并熟悉平台和SDK,我无法弄清楚这一点。我对MS Visual Studio有很多经验,我发现Xcode的工作原理非常相似,相比之下它仍然缺乏相当多的功能,但仍然是一个非常好的IDE。在调试时,Xcode的工作方式与Visual Studio非常相似,因为您可以将鼠标悬停在变量上,它将显示其当前值。然而,当谈到对象变量时,它几乎总是只给出地址和扩展箭头,扩展箭头扩展为“NSObject”,扩展为“isa”,扩展到所有不告诉我任何东西的属性。我已经习惯了IDE,就像Visual Studio一样,足够聪明,可以对我进行一些内省,并为我显示实际对象及其所有直接属性和值。我假设Xcode足够聪明,我只是没有正确使用它。
如果我在涉及对象实例的代码行上设置断点(比如说NSDateComponents实例),我如何查看其属性的值(即年,周,日,小时等)?
提前感谢您的帮助!
编辑:这是我查看的每个对象获得的信息的屏幕截图... alt text http://joecrotchett.com/images/misc/example.jpg
答案 0 :(得分:31)
令人沮丧。调试器必须知道每个对象的结构,但显然不是。但过去常常情况更糟。与NSArray一样,它们是一组对象。调试器不知道具体是什么类型的对象,这是由于Objective-C语言,而不是调试器。
当您深入开发iOS时,我认为您会发现Apple在开发方面落后于其竞争对手约15年。那不是开玩笑。但他们正在追赶,相信我,它曾经更糟糕!
答案 1 :(得分:5)
对于我的数据对象,我倾向于覆盖description
方法并输出带有对象摘要的字符串。像这样:
Printing description of myContact:
{name=Homer, lastname=Simpson, ...}
这意味着您可以快速检查调试器中的对象,或者当您NSLog
到控制台时。如果该描述包含所有相关数据,您还可以覆盖isEqual:
,以便它使用描述来比较两个对象。
答案 2 :(得分:3)
您还可以通过转到"编辑摘要格式"来更改Xcode在局部变量窗格中显示值的方式。在右键菜单上。
例如,要让它调用description
方法,您可以将其设置为
{(NSString*)[$VAR description]}:s
答案 3 :(得分:2)
将鼠标悬停在变量上会弹出一行。将鼠标略微向右移动,将鼠标悬停在弹出窗口左侧的三角形箭头上,该箭头将向下转动,另一个弹出窗口将打开,显示该对象的所有命名属性。
您还可以打印它的“描述”值。将指针略微向右移动,直到它超过两个小的“向上/向下”箭头。然后离开(好吧,“主要”)点击。弹出窗口将显示,一个选项将为“打印说明”。如果单击它,它会将其-description
方法的输出放到控制台。
答案 4 :(得分:1)
好了,再过几年了,xcode仍然在大多数对象上显示isa =(Class),而不是能够弄清楚对象是什么。
即使已经过去几年,Apple仍然落后,因为竞争正在围绕着他们(并且他们现在比竞争对手现状落后16年)。