NSLogで使用するための「toString()」に相当するObjective-Cとは何ですか?


170

カスタムクラスでオーバーライドできるメソッドはありますか?

      NSLog(@"%@", myObject) 

呼ばれると、それは私のオブジェクトのフィールド(または私が重要だと思うもの)を印刷しますか?JavaのObjective-Cに相当するものを探していると思いtoString()ます。

回答:


250

これは、次のdescriptionように宣言されたインスタンスメソッドです。

- (NSString *)description

以下は実装例です(grahamparksに感謝):

- (NSString *)description {
   return [NSString stringWithFormat: @"Photo: Name=%@ Author=%@", name, author];
}

5
CoreDataを使用している場合、descriptionプロパティは予約されており、役立つデバッグ情報を提供します。その場合は、独自のメソッド名を作成する必要があります。
Nuthatch 2013

debugDescriptionも予約?DebugDescriptionLLDBのようなデバッガーで使用されることになっていると思いますが。
MaddTheSane 2014年

36

これを@implementationPhotoクラスのに追加します。

- (NSString *)description {
   return [NSString stringWithFormat:@"Photo: Name=%@ Author=%@",name,author];
}

24

NSObjectの記述メソッドをオーバーライドできます:

- (NSString *)description

ロギングについては、Objective-Cでのロギングを改善するために、このブログ投稿をお勧めします。


4
これは静的メソッドではありませんか?クラスではなくオブジェクトを操作したいのですが。たとえば、「名前」と「作成者」のフィールドを持つ「写真」クラスがある場合、オブジェクトに割り当てられているフィールドをNSLogで印刷したいとします。
ジョージアームホールド2009

2
はい-よくわかりました-間違ったキーを押しました。私が答えを証明するとき、私は明らかにもっと注意を払うべきです。ありがたいことに、誰かがボールに目を留めていました:-)
ティーボット2009

13

使用できる機能は2つあります。

- (NSString*)description

これは、オブジェクトをIEのパラメータとして配置したときに表示されますNSLog。その他の記述関数は次のとおりです。

- (NSString*)debugDescription

これはpo anInstanceOfYourClass、デバッグコマンドウィンドウで実行したときに呼び出されます。クラスにdebugDescription関数がない場合は、description呼び出されます。

基本クラスNSObjectdescription実装されていますが、それはかなり基本的なものであることに注意してください。オブジェクトのアドレスを表示するだけです。このためdescription、特にdescriptionコードでメソッドを使用する場合は、情報を取得したいクラスに実装することをお勧めします。descriptionコードで使用する場合はdebugDescription、同様に実装して、debugDescriptionさらに冗長にすることをお勧めします。


1

これは利用可能な音声を出力します:

    NSLog((@"speechVoices:%", [[AVSpeechSynthesisVoice speechVoices] description] ));
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.