2012-03-03 9 views
2

NSStringアドレスオブジェクトをUILabelテキストに渡そうとしていますが、次のスクリーンショットに示すように、 NSStringとして宣言しますが、XcodeはNSdataとして扱い、互換性のない受け渡しを受け取りました。

incompatible pointer type warning - screenshot

そして、あなた以下のスクリーンショットから

は私のアドレスオブジェクトは、NSStringのように宣言されていることがわかります。

property type - screenshot

私は私のNSStringを表示しようとしていた:

NSLog(@"%@",[[LocationData objectAtIndex:rowDisplay] address]); 

、それがどの互換性のないポインタエラーなしで動作します。誰でも助けてくれますか?私はいくつかの調査を行ったが、まだ解決策を見つけることができない。

私のアドレスは、NSArrayに格納されるオブジェクトです。アドレス形式は常に同じです。たとえば、 "542 W 112 St New York NY 10025"となります。

ありがとうございました。

+3

コードのいくつかの行*の*を掲示する代わりに、あなたの質問に実際のコードを含めて、何が起こっているのかを理解できるように十分に表示してください。例えば、 'LocationData'とは何ですか? – Caleb

+0

同じ画像を2回転記しました。あなたが「住所」を宣言するのに使用したコードを表示できますか?そして、あなたのコードをここに投稿することでそれを行う方が良いです。 – sch

+0

住所の宣言は何ですか? – freespace

答えて

1

あなたの質問には多くのフォローアップの質問があります。

NSLog(@"%@",[[LocationData objectAtIndex:rowDisplay] address]); 

なぜUILabelにこれを使用しない:

self.displayAddress.text = [NSString stringWithFormat:@"%@"[[LocationData objectAtIndex:rowDisplay] address]]; 

PS:コードの1ライン分の画像を使用しないでくださいしかし、あなたはあなたが見ることができます、と述べました。私はここにあなたのコードを再入力する必要があります...

+0

ご返信ありがとうございます。あなたのself.displayAddress.text = [NSString stringWithFormat:@ "%@" [[LocationData objectAtIndex:rowDisplay] address]];問題を解く。私はコンパイラエラーを表示したいので、イメージを使用しました。次回は自分のコードを含めます。ごめんなさい。 – Kin

4

これは、一部のSDKクラスにaddressというメソッド/プロパティが既に存在し、それがNSData *を返すことが原因である可能性があります。

NSArrayobjectAtIndex:はタイプidのオブジェクトを返し、コンパイラはaddressNSString *を返すように定義されたカスタムクラスだということを知りません。 addressセレクタに一致すると、SDKから取得したもので、自分のものではありません。

あなたはしかし、あなたのクラスに返されたオブジェクトをキャストすることができますし、あなたの方法addressが呼び出されています:%@フォーマットはNSString *NSData *(のための両方を受け入れるため、NSLogaddressを出力するときには、警告が表示されていない

[(YourClass *)[LocationData objectAtIndex:rowDisplay] address]; 

NSString以外のクラスでは、実際にdescriptionメソッドの結果が出力され、NSString *が返されます)。

+2

コンパイラは、ポインタの型に関係なく、呼び出すメソッドを推測するだけではありません。実際、実行されるメソッドは、呼び出しが実行時に実際に発生するまでは決定されません。コンパイラはそれを決定しません。呼び出されるメソッドは、オブジェクトを参照するために使用されるポインタの型ではなく、オブジェクトの実際のものによって決まります。 – Caleb

+0

ビルド設定で厳密なセレクタに一致する警告をオンにすることで、これらのエラーをキャッチできます。 – Jim

関連する問題