web-dev-qa-db-ja.com

「 'xxx:'という名前の複数のメソッドが見つかりました」エラーを無効にする

ViewController.mファイル内の現在のプロジェクトでは、次のメソッドを実行しています。

[[connection writer] writeData: data];

警告を返します:

warning: multiple methods named 'writeData:' found

私はメソッドを呼び出そうとしています:

- (void) writeData: (NSData*)data

... TCPWriter.mで。残念ながら、他に2つのwriteDataメソッドがあります

- (void)writeData:(NSData *)data;

... NSFileHandle.hおよび...

- (BOOL)writeData:(NSData *)data

... NSURLHandle.hで。 [conn writer]TCPWriterクラスを返し、そのクラスは正しいwriteDataメソッドを呼び出す必要があるため、これは特に混乱を招きます。さらに、NSFileHandle.hとNSURLHandle.hが、プロジェクトの別の部分ではなく、ViewController.hに含まれているライブラリのいずれかに含まれていることさえ完全にはわかりません。

どのwriteDataメソッドを呼び出したいかをコンパイラに示すにはどうすればよいですか?また、なぜこのエラーが発生するのですか?

29
Holtorf

[接続ライター]が実際にTCPWriter *を返していることを確認してください。 IDを返している場合、コンパイラーは使用するwriteDataを認識しません。また、TCPWriter.hファイルをインポートしていることを確認してください。コンパイラがヘッダーファイルを認識しない場合、デフォルトでidが返され、同じ問題に戻ります。

試してみてください

TCPWriter* writer = [connection writer];
[writer writeData: data];

または

[(TCPWriter*)[connection writer] writeData: data];
53
Peter N Lewis

上記のすばらしい答えの代わりに、次のように、オブジェクトを適切なタイプにキャストして、警告を取り除くこともできます。

[(NSView*)textView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)]; // for horizontal scrolling
5
McUsr