2009-09-01 97 views
1

今天在我的代碼中搜索錯誤時,我發現了一件奇怪的事情。在調試器中檢查UIView實例時,Xcode的變量視圖不顯示子視圖成員UIView類。在調試器的變量列表中調試UIViews缺失的子視圖成員

我只看到此字段在調試器(>應指明該開口三角形):

  • UIResponder

  • _layer

  • _tabInfo

  • _gestureInfo

  • _touchData

  • _charge
  • _tag
  • _viewFlags

我錯過了_subviews成員和前來也認爲這一切的位置成員(其中至少有一個應該在那裏)。

有沒有人知道我失蹤或做錯了什麼(據我可以告訴它不是一個問題,因爲谷歌搜索這個問題沒有得到任何結果)。

我使用的Xcode 3.1.3版本有:

  • XcodeIDE:1191.0
  • XcodeCore:1192.0
  • XcodeSupport:1186.0

與OS 10.5.7和iPhone的Mac SDK 2.2.1(我也使用iPhone SDK 3.0測試過)。

我希望有人知道這件事。它給了我一個奇怪的感覺,我不能相信調試器向我展示我應該知道的用於調試問題的所有信息。如果你不信任你的工具,它是不好的:(

+0

UIView沒有subviews成員。看看UIView.h文件。 – oxigen

+0

這很有趣。但是有一個名稱爲子視圖的屬性,您可以使用它來遍歷代碼中的所有子視圖。 在頭文件中進一步查看時,我看到該屬性,並且它在UIView的類別中定義:@interface UIView(UIViewHierarchy)與我缺少的框架屬性相同。所以它接縫調試器不能顯示在類別中定義的成員。 並感謝與.h文件的提醒我完全忘記了在那裏看我的任務寫作oO 這個結構接縫是相同的所有UIView.h文件我在這裏 – Chris

回答

2

調試器只能夠顯示你的成員,而不是屬性。記住,Objective C中兩者是不同的。屬性只是語法上的糖一個二傳手和/或一個吸氣。所以只讀「子視圖」的UIView財產只能保證它有這個方法的實現:

- (NSArray *)subviews; 

正如你已經注意到,蘋果已經使用類似於其對應的未公開的成員變量來實現他們的許多特性屬性名稱,但帶有前導下劃線。這允許您窺視某些對象的內部,以瞭解某些情況下發生了什麼,但許多屬性並未以這種透明的方式實現。在這些情況下,您需要在您的應用程序中注入一些診斷代碼以訪問該屬性並使用NSLog輸出其返回值,並/或將該值存儲在您可在調試器中觀察到的臨時變量中。

不要責怪這個糟糕的調試器。它正在做它設計要做的事情。如果它有幫助,你可以責怪屬性,試圖欺騙我們認爲他們是真正的方法時他們是成員變量。

+0

好吧,我現在看到什麼問題是。感謝您的幫助。 – Chris