我在UITableViewController中的代码:
delegate.myData = [myData objectAtIndex:indexPath.row];
如何在调试器中查看delegate.myData
或indexPath.row
的值? delegate.myData
应为数组,indexPath.row
为int
。我只能看到对象delegate
和indexPath
的内存地址,但myData
和row
在哪里?
答案 0 :(得分:127)
选中此How to view contents of NSDictionary variable in Xcode debugger?
我也用
po variableName
print variableName
在控制台中。
在您的情况下,可以执行
print [myData objectAtIndex:indexPath.row]
或
po [myData objectAtIndex:indexPath.row]
答案 1 :(得分:22)
我同意其他海报,Xcode作为一个开发环境应该包含一个简单的方法来调试变量。嗯,好消息,有一个!
在搜索并没有找到关于如何在Xcode中调试变量的简单答案/教程之后,我去探索了Xcode本身并发现这(至少对我来说)非常有用的发现。
在Xcode的主屏幕中,确保通过单击屏幕截图中显示的右上角按钮来查看底部调试区域。
现在设置一个断点 - 代码中您希望程序暂停的行,方法是单击代码区域的边框。
现在在调试区域中查找此按钮并单击中间的按钮。您会注意到您的区域现在分成两部分。
现在运行您的应用程序。
在执行程序期间到达第一个断点时,您将在左侧看到该断点处可用的所有变量。
您可以展开变量上的左箭头以获得更多细节。甚至可以使用搜索字段来隔离您想要的变量,并在您实时看到它变化时,进入"断点的范围。
在调试区域的右侧,您可以使用鼠标右键单击所需变量,发送以根据需要打印变量。
正如您所看到的,该上下文菜单中充满了非常有趣的调试选项。例如已经使用类型化命令建议的 Watch ,甚至编辑值... ,它会改变变量的运行时值!
答案 2 :(得分:19)
你也可以:
恕我直言,有点隐蔽和麻烦...
答案 3 :(得分:9)
您的混淆源于声明的属性不是(必须命名为)(实例)变量的事实。
表达
indexPath.row
相当于
[indexPath row]
和作业
delegate.myData = [myData objectAtIndex:indexPath.row];
相当于
[delegate setMyData:[myData objectAtIndex:[indexPath row]]];
假设合成属性的标准命名。
此外,delegate
可能被声明为id<SomeProtocol>
类型,即编译器无法在此时为delegate
提供实际类型信息,并且调试器依赖于编译时提供的信息。由于id
是泛型类型,因此delegate
中没有关于实例变量的编译时信息。
这些是您没有将myData
或row
视为变量的原因。
如果您想检查发送-row
或-myData
的结果,可以使用命令p
或po
:
p (NSInteger)[indexPath row]
po [delegate myData]
或使用表达式窗口(例如,如果您知道delegate
的实际类型为MyClass *
,则可以添加表达式(MyClass *)delegate
,或右键单击delegate
},选择View Value as…
并输入delegate
的实际类型(例如MyClass *
)。
话虽如此,我同意调试器可能更有帮助:
可以选择告诉调试器窗口使用运行时类型信息而不是编译时信息。它会减慢调试器的速度,但会提供有用的信息;
声明的属性可以显示在名为properties的组中,并允许(可选)直接在调试器窗口中进行检查。这也会减慢调试器的速度,因为需要发送消息/执行方法以获取信息,但也会提供有用的信息。
答案 4 :(得分:6)
您可以在运行时将值打印到控制台窗口。以下是步骤:
答案 5 :(得分:1)
这有点复杂。这些对象是自定义类或结构体,在Xcode中查找它们并不像在其他开发环境中那样容易。
如果我是你,我会通过一些描述来记录您想要看到的值。
即:
NSLog(@"Description of object & time: %i", indexPath.row);
答案 6 :(得分:1)
尝试运行 - >显示 - >表达式
输入数组的名称或您要查找的任何内容。