iDタイプをNSStringオブジェクトに変更する方法はありますか?私のコードの次の行に注意してください。
NSString *value = [appDelegate.bird_arr objectAtIndex:rowClicked] ;
このappDelegateは、ナビゲーションベースのプログラムのAppDelegateクラスのオブジェクトであり、bird_arrはNSMutableArrayのオブジェクトです。クリックされた行に書かれた文字列を使いたい。ただし、objectAtIndex:はIDタイプを返します。このIDタイプをNSStringに変更する方法、または特定の行内の文字列を収集できる他の方法はありますか?
うん、それをキャストするだけ
NSString *value = (NSString *)[appDelegate.bird_arr objectAtIndex:rowClicked];
それが本当にNSStringであることを再確認したい場合は
[someId isKindOfClass:[NSString class]]
id
は任意のオブジェクトへのポインタであり、自動的に任意のオブジェクトポインタ型に昇格します(Cのvoid *
のようなもの)。そこに表示されているコードは正しいようです。明示的なキャストは必要ありませんが、本当に必要な場合は追加できます。
配列から取得するオブジェクトが実際にはNSString
でない場合は、必要なオブジェクトを取得するために他の作業を行う必要があります。
「id
type」は、戻り値がオブジェクトであることを示しているだけで、それ以上のものはありません。すでにNSStringオブジェクトである場合もあれば、別のものである場合もあります。この配列内のすべてのオブジェクトが文字列である場合、作業は完了です。それらが何か他のものである場合、あなたはそれを文字列に入れるための何らかの方法が必要です。
オブジェクトis NSStringであると仮定すると、NSString *へのキャストは正常に機能するはずです。
NSString* value = (NSString*)[appDelegate.bird_arr objectAtIndex:rowClicked];
鋳造はより安全な側で行うことができますが、ここでは必要ありません。キャスト後とキャストなしの両方で、コードを使用していくつかのことを試しましたが、問題なく動作しました。 Idは参照を保持し、どのタイプの参照が実行時に行われるのかと思います。ただし、特定の行のテキストを文字列形式で取得する別のより良い方法を見つけました。私はcellForRowAtIndex:indexメソッドを使用してそれを行いました。これにより、指定されたインデックスのセルが返され、textLabelプロパティが使用されます。あなたの返事に感謝し、みんなを助けてください。
foundationでは、すべてのオブジェクトは次のようなメソッドを持つNSObjectクラスを継承します。
+ (NSString *)description;
だからあなたはそれをこのようにすることができます:
NSString *value = [[appDelegate.bird_arr objectAtIndex:rowClicked] description];