我的代码在一个UITableViewController中:
delegate.myData = [myData objectAtIndex:indexPath.row];
我该如何在调试器中查看delegate.myData
或indexPath.row
的值?delegate.myData
应该是一个数组,而indexPath.row
是一个int
。我只能看到delegate
和indexPath
对象的内存地址,但是myData
和row
在哪里呢?
我的代码在一个UITableViewController中:
delegate.myData = [myData objectAtIndex:indexPath.row];
我该如何在调试器中查看delegate.myData
或indexPath.row
的值?delegate.myData
应该是一个数组,而indexPath.row
是一个int
。我只能看到delegate
和indexPath
对象的内存地址,但是myData
和row
在哪里呢?
请查看这个如何在Xcode调试器中查看NSDictionary变量的内容?
我也使用
po variableName
print variableName
在控制台中执行。
在你的情况下,可以执行
print [myData objectAtIndex:indexPath.row]
或者po [myData objectAtIndex:indexPath.row]
po obj
的等效语句是po print(obj)
。 - Chris我同意其他发帖者的看法,作为一个开发环境,Xcode应该包括一种简单的方法来调试变量。好消息是,确实有这样一种方法!
在搜索并没有找到如何在Xcode中调试变量的简单答案/教程后,我去探索了一下Xcode本身,并发现了这个(至少对我来说)非常有用的发现。
在Xcode的主屏幕上,通过单击屏幕右上角的按钮,确保查看底部的Debug Area。
现在通过单击代码区域的边框来设置断点-您希望程序暂停的代码行。
现在,在调试区域中查找此按钮并单击中间的按钮。您会注意到您的区域现在分成两部分。
现在运行您的应用程序。
当程序执行期间达到第一个断点时,您将在左侧看到所有可用于该断点的变量。
您可以展开变量左侧的箭头以获取更详细的信息。甚至可以使用搜索字段来隔离您想要的变量,并随着进入断点的范围而实时查看其变化。
在调试区域的右侧,您可以使用鼠标右键单击所需的变量,并将其发送到打印输出,以便按照您的要求进行排版。
正如您所看到的,该上下文菜单充满了非常有趣的调试选项。例如监视已经建议使用输入的命令,或者甚至编辑值…会更改您的变量的运行时值!
此外,您还可以:
我认为这有点隐蔽和繁琐......
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
,选择查看值为...
并输入delegate
的实际类型(例如MyClass *
)。
话虽如此,我同意调试器可能会更有帮助:
可以有一个选项告诉调试器窗口使用运行时类型信息而不是编译时信息。它会减慢调试器的速度,但会提供有用的信息;
声明的属性可以显示在名为属性的组中,并允许(可选)直接在调试器窗口中进行检查。这也会因需要发送消息/执行方法以获取信息而减慢调试器的速度,但也会提供有用的信息。
这有点复杂。这些对象是自定义类或结构体,而在Xcode中查看它们并不像其他开发环境那样容易。
如果我是你,我会使用NSLog记录想要查看的值,并加上一些描述。
i.e:
NSLog(@"Description of object & time: %i", indexPath.row);
尝试运行 -> 显示 -> 表达式
输入数组的名称或你要查找的任何内容。
delegate.myData
,就这样。
delegate.myData
,然后就完成了。请检查我的答案:https://dev59.com/7m445IYBdhLWcg3wssXH#70614719 - petrsyn