web-dev-qa-db-ja.com

LLDBデバッガーで変数プロパティの値を表示しますか?

アクション「ログメッセージ」でブレークポイントを使用していて、NSIndexPathの行を出力したいと思います。だから私は試しました:_cell row @indexPath.row@_しかし何も印刷されません。デバッガコマンドexpr (void)NSLog(@"indexPath row:%i", indexPath.row)も使用しようとしましたが、エラーが発生します:_error: property 'row' not found on object of type 'NSIndexPath *'_

私は何が間違っているのですか?

13
Snowman

ドット構文は、コンパイラーによって追加された単なる構文糖衣です。私はこれをObjective-Cに追加することにいつも同意していませんが、一部の人々はそれを気に入っています。これらのドットはコンパイラによってメソッド呼び出しに変換されるため、デバッガのように直接メッセージを送信する場合は、実際のメソッド呼び出しを使用する必要があることを覚えておく必要があります。式を書き直してみてください。

expr (void)NSLog(@"indexPath row: %ld", (long int)[indexPath row])

デバッガーの基本的なlogメソッドがこのようなメソッド呼び出しを実行するかどうかはわかりません。そのため、式の型を使用する必要がある場合があります。

27
Jason Coco

これは特別な場合だと思います。以下のコードは機能しますが、rowが何らかの値に初期化されている場合に限ります。

(lldb) print (NSInteger)[indexPath row]

これは、rowプロパティがUIKitのNSIndexPathの拡張であり、そのクラスのカテゴリとして実装されているという事実に関連している可能性があると思います。

21
Mike M

Xcodes変数ビューでこの要約形式を設定してみてください。

section:{(int)[$VAR section]},row:{(int)[$VAR row]}
2
Steven Kramer