2012-08-16 83 views
11

我設置一個斷點...如何在調試器控制檯中獲取NSDictionary對象的值/鍵?

如果我這樣做:

(lldb) print [self dictionary] 
(NSDictionary *) $5 = 0x0945c760 1 key/value pair 

,但如果我這樣做:

(lldb) print [[self dictionary] allKeys] 
error: no known method '-allKeys'; cast the message send to the method's return type 
error: 1 errors parsing expression 

即使我嘗試訪問我所知道的是在那裏的關鍵..

(lldb) print [[self dictionary] objectForKey:@"foobar"] 
error: no known method '-objectForKey:'; cast the message send to the method's return  type 
error: 1 errors parsing expression 

我在做什麼錯?

+1

你做錯了第一件事就是將這個問題標記爲'xcode'。 – 2012-08-16 19:51:03

+0

'po [self dictionary]' – Joe 2012-08-16 19:54:01

回答

14

你會說英語嗎? - 看起來你做得很好!而啊,真巧,調試器也行!

非常好,我們完成了困難的一部分。所以,現在你瞭解對方與調試器,讓我們看看它表明:

error: no known method '-objectForKey:'; cast the message send to the method's return type 

所以,它告訴你不能從消息發送的名稱只是推斷返回類型的信息 - 這是完全正常的(一個不使用匈牙利符號,對吧?)。它甚至會告訴你如何解決這個問題 - 你必須轉換消息發送到該方法的返回類型

啓動Apple的文檔,我們發現- [NSDictionary objectForKey:]返回id - 通用Objective-C對象類型。鑄造於ID(甚至更好,如果你知道什麼類型的字典持有的對象,鑄造,準確的對象類型)的伎倆:

(lldb) print (MyObject *)[(NSDictionary *)[self dictionary] objectForKey:@"foobar"] 
+1

我感謝你的聰明的自我! :)我會留下這個問題的另一個例子: **失敗:**'print [[[self。我們可以通過下面的例子來說明如何使用這個方法來創建一個新的對象:[ObjectAtIndex:0] isKindOfClass:[UITapGestureRecognizer class]]' **好:**'print(BOOL)[[[self.collectionView gestureRecognizers] objectAtIndex:0] isKindOfClass:(Class)[UITapGestureRecognizer class]請注意需要2個演員才能使其工作。 – Jeff 2013-07-02 14:18:49

+0

將它留在Objective C中,以簡單的方式取得簡單。 – 2016-11-04 20:52:59

3

爲什麼不只是做

NSLog(@"dict: %@", dictionary); 

NSLog(@"dict objectForKey:foobar = %@", [dictionary objectForKey:@"foobar"]); 
+0

我想他試圖從控制檯獲取信息而不是源代碼。然而,在我看來,這是更好的方式。 – 2012-08-16 19:57:48

13

的LLDB命令打印預計要打印的值是一個非對象。您應該用來打印對象的命令是po。

當您告訴lldb打印該值時,它會查找名爲allKeys的方法,該方法返回一個非對象並失敗。請嘗試使用以下命令:

po [[self dictionary] allKeys] 
3

要打印您需要在GDB或LLDB對象的description使用print-objectpo

(lldb) po [self dictionary] 
(lldb) po [[self dictionary] objectForKey:@"foobar"] 
0

似乎是導致po dictionary[@"key"]打印一個空行,而不是關鍵的價值目前在LLDB的錯誤。改用[dictionary[@"key"] description]來獲得該值。

相關問題