Победа над несколькими методами с именем «xxx:» обнаружила ошибку

В моем текущем проекте внутри файла ViewController.m я запускаю метод:

[[connection writer] writeData: data];

Он возвращает предупреждение:

warning: multiple methods named 'writeData:' found

Я пытаюсь вызвать метод:

- (void) writeData: (NSData*)data

...в TCPWriter.m. К сожалению, есть два других writeData метода

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

... в NSFileHandle.h и...

- (BOOL)writeData:(NSData *)data

... в NSURLHandle.h. Меня это особенно сбивает с толку, потому что [conn writer] должен возвращать класс TCPWriter, а этот класс должен вызывать правильный метод writeData. Более того, я даже не до конца уверен, что NSFileHandle.h и NSURLHandle.h вообще включены в какую-либо из библиотек, включенных в ViewController.h, а не в другую часть проекта.

Как я могу показать компилятору, какой writeData метод я хочу вызвать и почему возникает эта ошибка?


person Holtorf    schedule 24.06.2009    source источник


Ответы (2)


Убедитесь, что [запись соединения] действительно возвращает TCPWriter*. Если он возвращает идентификатор, то компилятор не будет знать, какие данные записи использовать. Кроме того, убедитесь, что вы импортируете файл TCPWriter.h — если компилятор не видит файлы заголовков, он по умолчанию возвращает идентификатор, что вернет вас к той же проблеме.

Пытаться

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

or

[(TCPWriter*)[connection writer] writeData: data];
person Peter N Lewis    schedule 24.06.2009
comment
Я не понимал, что по умолчанию он возвращает идентификатор, когда файл не был явно импортирован. Спасибо! - person Holtorf; 24.06.2009
comment
Включите предупреждения, и вам не придется удивляться. Другие флаги компоновщика: -Wall и включите многие другие, в том числе рассматривать предупреждения как ошибки. - person Peter N Lewis; 25.06.2009

В качестве альтернативы великолепному ответу выше вы можете привести объект к нужному типу, чтобы избавиться от предупреждения, например так:

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