如何修复此警告:"找不到方法(返回类型默认为'id')"

Pre*_*ton 14 iphone sdk warnings objective-c xcode4

我试图摆脱我的iPhone应用程序中的一些警告.我得到的最多的是当我有一个void函数时,我用[self myFunction];来调用它.警告在我调用函数的行上,它说:"找不到方法'-myFunction'(返回类型默认为'id')." 我需要做些什么来解决这个问题?谢谢

mvd*_*vds 18

在头文件中声明函数,如下所示:

 -(void)myFunction;
Run Code Online (Sandbox Code Playgroud)

要么

 -(NSString*)myFunction;
 -(id)myFunction;
 -(NSInteger)myFunction;
 -(BOOL)myFunction;
Run Code Online (Sandbox Code Playgroud)

等等

这比仅仅沉默编译器更重要:如果函数的返回类型不是指针(idanything*),特别是当它没有相同的大小时,你可能会变得非常奇怪并且很难找到错误.

例如,如果一个函数返回一个CGRect结构,并且编译器假设id(如警告所示),那么真的会发生奇怪的事情.


Dav*_*ave 6

您需要在头文件(.h)中定义该函数(如果它应该对其他类可见),或者在实现文件(.m)中定义该函数(如果它对您的类是私有的).

例如,如果您使用方法:

-(void)myFunction {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

对于"私有"功能,请将其添加到.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
Run Code Online (Sandbox Code Playgroud)

或者,如果要从其他文件中调用该方法,请将其添加到.h文件中,在"interface"部分中; 在所有属性之后,在@end之前.

祝好运!