2012-08-16 15 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」とタグを付けることです。 –

+0

'po [自己辞書]' – Joe

答えて

14

英語を話しますか? - それはあなたがそうしているようです。そして、ああ、どんな偶然でも、デバッガもそうです!

非常に良い、我々はハード部分で終わった。だから今は、デバッガでお互いを理解していること、のは、それが示唆するものを見てみましょう:だから

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

、それはメッセージ送信の名前から、単に戻り値の型情報を推測することはできませんがわかります - それは完全に罰金です(ハンガリー表記を使用していません)。そしてそれは正確にあなたがその問題を解決しなければならない方法を教えてくれる - あなたはキャストキャストのメソッドの戻り値タイプにメッセージを送信する必要があります。

アップルのドキュメントを起動すると、- [NSDictionary objectForKey:]id - 一般的なObjective-Cオブジェクトタイプを返します。 (あなたはあなたの辞書が、その正確なオブジェクト型にキャストし、保持しているオブジェクトの種類を知っていれば、さらに良いか)IDにキャストすると、トリックを行います。

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

あなたのスマートなアレックの自己に感謝! :)私はこの問題の別の例を残します: **失敗:** 'print [[[self。0] isKindOfClass:(クラス)[UITapGestureRecognizerクラス]] 'オブジェクトの種類:オブジェクトの種類:オブジェクトの種類:オブジェクトの種類]それを動作させるために必要な2つのキャストに注意してください。 – Jeff

+0

Objective Cに任せて、単純なことをばかばかしく単純にする。 –

3

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

または

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

彼はソースコードではなくコンソールから情報を取得しようとしていると思います。しかし、それは私の意見でそれを行うためのより良い方法です。 –

13

を行うだけでlldbコマンドの印刷は印刷したい値が非対象であることを期待していないのはなぜ。オブジェクトを印刷するために使用すべきコマンドはpoです。

lldbに値を表示するように指示すると、非オブジェクトを返して失敗するallKeysというメソッドが検索されます。代わりに次のコマンドを試してください...

po [[self dictionary] allKeys] 
3

あなたが必要とGDBまたはLLDB内のオブジェクトのdescriptionを印刷するにはprint-objectまたはpoを使用してください。

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

は、キーの値ではなく空の行を印刷するpo dictionary[@"key"]を引き起こし現時点でlldbにバグがあるようです。代わりに値を取得するには[dictionary[@"key"] description]を使用してください。

関連する問題