【发布时间】:2014-09-29 07:01:08
【问题描述】:
我正在尝试调试为什么 UIButton 没有显示在由 Swift 编写的键盘扩展显示的视图中。当它在 LLDB 调试器(Xcode 6.0.1)中显示为
dismissButton = (UIButton!) Some
我尝试使用变量前面的小层次箭头检查它的联系人,但是当我切换它时没有显示任何内容。
我尝试用 PO 打印出来并得到
<UIButton: 0x7fa673e0c6f0; frame = (27 14; 183 30); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7fa673e0b680>>
充其量似乎不完整(隐藏在哪里?)
有没有办法直接检查 LLDB 中 Swift 类对象的属性?我无法使用 View Hierarchy 调试器,因为无论我尝试使用哪种模拟器(iOS 8 从 4s 到 6),都不会为此项目启用“Capture View Hierarchy”。
编辑:根据恩里科的建议
(lldb) frame var -d run -- self.dismissButton
(UIButton!) self.dismissButton = Some {}
我用谷歌搜索,但没有找到任何关于“Some”在调试器上下文中的含义的文档。想知道我是否对项目有一些配置问题。容器 App 也是 Swift,但只是一个模板应用程序,完全采用 Xcode 6.0.1 生成的默认值。
Edit2:Enrico,只需输入 'frame var' 就会产生详细的输出,其中包含以下内容
dismissButton = Some {
Some = 0x00007fb90261f2e0 {
UIKit.UIControl = {
UIKit.UIView = {
UIKit.UIResponder = {
ObjectiveC.NSObject = {}
}
}
}
}
}
更有趣的是,很高兴发现 Some 实际上意味着什么(不确定它是否是 nil 的特例版本),但仍然需要一种方法来更深入地挖掘对象。
【问题讨论】:
-
“不完整”的 po 输出不是 LLDB 问题(po 由框架驱动,而不是由我们驱动)
-
至于“Some”,我很惊讶如果您展开打开它并没有向您显示指针值。你可以试试 (lldb) frame var -d run --dismissButton