Как исправить это предупреждение: "Метод не найден (тип возврата по умолчанию -" id ")
Я пытаюсь избавиться от некоторых из этих предупреждений от моего приложения iPhone. Тот, который я получаю больше всего, это когда у меня есть функция void, и я называю это с помощью [self myFunction];. Предупреждение находится в строке, где я вызываю функцию, и она говорит: "Метод" -myFunction "не найден (тип возврата по умолчанию -" id ")". Что мне нужно сделать, чтобы исправить это? Благодаря
Ответы
Ответ 1
Объявите функцию в вашем файле заголовка, например:
-(void)myFunction;
или
-(NSString*)myFunction;
-(id)myFunction;
-(NSInteger)myFunction;
-(BOOL)myFunction;
и т.д.
Это имеет большее значение, чем просто замолчать компилятор: если возвращаемый тип функции не является указателем (id
или anything*
), особенно когда он не имеет одинакового размера, вы можете получить действительно странно и трудно найти ошибки.
например. если функция возвращает структуру CGRect
, а компилятор предполагает id
(как предупреждает предупреждение), действительно будут странные вещи.
Ответ 2
Вам нужно определить эту функцию в файле заголовка (.h) (если он должен быть видимым для других классов) или в вашем файле реализации (.m), если он является приватным для вашего класса.
Например, если вы используете метод:
-(void)myFunction {
// do something
}
Для функции "private" добавьте это вверху вашего файла .m; перед линией @implementation MyCoolClass
.
@interface MyCoolClass() // <--- no 'category name' hides methods just for this file
-(void)myFunction; // <--- add the method here
-(void)myOtherFunction;
-(void)doSomeCoolThingWithThisString:(NSString *)firstName;
@end
ИЛИ если вы хотите вызвать метод из других файлов, добавьте его в свой .h файл в разделе "интерфейс"; после всех ваших свойств и перед @end.
Удачи!
Ответ 3
Вам нужно импортировать файл .h, содержащий ваши методы
Ответ 4
Я решаю эту проблему следующим образом:
- файл: MyObjectController.h -
#import "MyObject.h"
@interface MyObjectController
{
MyObject * obj;
}
-(void) makeSomething;
@end
- файл: MyObjectController.mm -
#import "MyObjectController.h"
@implementation MyObjectController
-(void) makeSomething {}
@end
--- файл MyObject.h ----
@class MyObjectController;
@interface MyObject
{
MyObjectController * objController;
}
-(void) callMakeSomethingFromObjController;
@end
--- файл MyObject.mm ----
#import "MyObject.h"
#import "MyObjectController.h" //Add this line!!! And compiller will found makeSomething
@implementation MyObject
-(void) callMakeSomethingFromObjController
{
[objController makeSomething];//warning was here:instance method '-makeSomething' not found (return type defaults to 'id')
}
@end
Ответ 5
Убедитесь, что у вас есть - (void) myFunction; объявленные в вашем файле заголовка, и также убедитесь, что myFunction ничего не возвращает.
Ответ 6
Просто убедитесь, что функция помещена перед вызывающим в вашем файле .m!
Я не делаю это правильно, но он удаляет все эти предупреждения для меня.
И в примере кода apple, я не вижу, что они объявляют все методы в файле h или m. Может просто использовать его сразу.
Ответ 7
У меня возникла аналогичная проблема для меня, и это было потому, что у меня был другой заголовочный файл с тем же именем в другом подкаталоге в проекте, который, как я думал, я удалил. Это в конечном итоге заставило компилятор думать, что метод не был объявлен в заголовке, потому что он искал неправильный заголовочный файл.
Ответ 8
Убедитесь, что объект, который вы используете, объявляет эту функцию в файле заголовка.
sky.h
:
@interface sky : object {
}
-(void) doSomething:(int)param;
@end
sky.m
:
#import "sky.h"
@implementation sky
-(void) doSomething:(int)param
{
//dosomething usefull
}