Вопрос по objective-c, xcode – Победа над ошибкой «несколько методов с именем« xxx: »found»

28

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

<code>[[connection writer] writeData: data];
</code>

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

<code>warning: multiple methods named 'writeData:' found
</code>

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

<code>- (void) writeData: (NSData*)data
</code>

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

<code>- (void)writeData:(NSData *)data;
</code>

... в NSFileHandle.h и ...

<code>- (BOOL)writeData:(NSData *)data
</code>

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

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

Ваш Ответ

2   ответа
53

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

Пытатьс

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

ил

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

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

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

Похожие вопросы