2013-02-27 97 views
8

所以我是Xcode的新手,在iOS項目上工作,而且我正忙於最基本的調試。具體而言,我需要能夠在瀏覽代碼時查看對象的狀態(這不是瘋了嗎?),但我不能在我的生活中弄清楚如何在Xcode中執行此操作。在調試過程中查看Xcode中的對象/屬性狀態

每當我嘗試,似乎我得到的最遠是一個內存地址,無法展開以顯示其客觀內容。我也無法找到任何方法來手動取消引用調試控制檯中的指針,以查看該對象的狀態。

這裏我想查看store.storeHours數組的內容,但沒有任何運氣。事實上,左邊的視圖告訴我陣列中有0個對象,當我嘗試展開它時不會顯示任何內容,但當我控制檯顯示7個對象時,雖然無用地描繪爲內存地址。

enter image description here

請告訴我,我不是瘋了,我只是失去了一些東西!

更新:所以事情變得更加怪異!當我突然將可變顯示切換到「本地」而不是「自動」時,self.store.storeHours變得完全可導航!我想知道是否有一個小故障訪問正確的「storeHours」實例或其他東西,因爲它現在清楚地標識數組中的7個對象!更不用說這些物體可以像我最初希望的那樣展開。

enter image description here

+0

'小時'是你的自定義班嗎? – 2013-02-27 00:31:30

+0

是的............ – devios1 2013-02-27 00:31:57

回答

8

的情況下,實際上提供的信息本身。您需要爲您的自定義類實施description方法(從NSObject繼承),以便它們能夠將自己打印爲內存地址以外的內容(這是NSObject的實現所做的)。

我不知道你的Hours類有什麼樣的屬性,但是這是因爲像那樣簡單:

- (NSString *)description 
{ 
    return [NSString stringWithFormat:@"Open: %i Close: %i", self.openTime, self.closeTime]; 
} 

的方法只需要返回一個包含NSString的任何信息,你覺得重要的是要看到,當檢查物體。

當您在NSLog()中使用%@格式說明符時,這也是類如何表示自己。

+0

好吧,這絕對是一個開始。我至少可以看到小時對象現在是什麼。不幸的是,默認的NSObject實現不能以通用的方式遞歸地顯示屬性和值。我猜Obj-C對於那種東西來說太低級了。 – devios1 2013-02-27 00:47:23

+1

運行時庫中有內省設施,因此實際上對象只需吐出所有屬性即可:http://www.google.com/search?q=site:stackoverflow.com+ -channel:meta.stackoverflow.com + objective-c + print + all + properties + of + an + object – 2013-02-27 00:53:14

+2

@chaiguy看看kendall-helmstetter-gelner關於正確內省的超級有用答案(這就是你要求); http://stackoverflow.com/a/2304797/91282 – Till 2013-02-27 00:53:25

0

實施

-(NSString*)description{ 
    //Return a string in whatever way you like to describe this instance. That is what xcode debugger reads. 
    //This is implemented in the parent to return the address, that's why you see that way. 
} 
+1

你能稍微擴大這個答案嗎? – thomasrutter 2013-02-27 00:56:42

1

在你的榜樣,store.storeHours是一個空的NSArray。所以,當然,你不能在裏面看。

對於調試程序更清晰,嘗試添加一個方法(從NSObject的繼承)

- (NSString*) description 

到您的對象,如Hours,告訴你更多關於他們的內容。另見debugDescription

+0

看到這也是我的想法,但它不*空,並且在調試時,for..in循環迭代了7個對象,但我看不到有7個對象,除非我明確地指出'po' storeHours在控制檯。很混亂。 – devios1 2013-02-27 00:37:41

+0

你在最新版本的Xcode,@chaiguy上?在查看ivars方面,LLDB一開始就有點兒麻煩。 – 2013-02-27 00:40:33

+0

這是我認爲最新的(4.5.2(4G2008a))。控制檯說(gdb)儘管如此,這意味着我不使用LLDB? – devios1 2013-02-27 00:41:54

相關問題