2015-12-02 55 views
0

如果我想要po subView的超級視圖,當我使用subView.superView,它會抱怨沒有找到,但如果我使用[subView superView],po命令將運行良好,這是什麼原因?爲什麼lldb的po命令不能在dot中打印superview?

(lldb) po self.blackView.superview 
error: property 'superview' not found on object of type 'UIView *' 
error: 1 errors parsing expression 
(lldb) po ((UIView*)self.blackView).superview 
error: property 'superview' not found on object of type 'UIView *' 
error: 1 errors parsing expression 
(lldb) po [self.blackView superview] 
<UIView: 0x15d53ce50; frame = (0 0; 375 667); autoresize = W+H; layer = <CALayer: 0x15d53cfc0>> 
+0

您正在使用哪種XCode版本? – Leo

+0

當使用多個點時,LLDB解析問題。第一個會起作用,而第二個不會。 – Avi

+0

@Leo使用Xcode 7.1 – ximmyxiao

回答

2

它們通常不是真正的解析問題,它們往往是「類型信息質量」問題。在這種情況下,superview實際上是UIViewHierarchy類別中的一個屬性,並且clang的調試信息中存在一個錯誤,導致它不會爲類別中的屬性生成調試信息。除非知道類型,否則編譯器不會將方法調用的屬性訪問權限。

如果您使用Xcode7,通常可以通過指示lldb爲感興趣的框架構建模塊來修復使用clang「模塊」功能(包括大多數Apple框架)的框架的這種類型信息問題,有更豐富的類型信息。您可以通過發出命令LLDB做到這一點:

(lldb) expr @import UIKit 

嘗試運行,試圖表達你之前,看看有沒有去任何好轉。

+0

是的〜Jim的解決方案效果很好〜 – ximmyxiao