我有一个简单的问题。
在Objective-C中,当你有一个想要调用的方法时,返回类型为void
,你如何从另一种方法中调用它?
我在我的应用程序中这样做的方式是:
[self nameOfMethod];
但是这导致Xcode吐出以下错误:
Method '-nameOfMethod' not found (return type defaults to 'id')
虽然它似乎仍在执行中。
我称之为正确,还是有更好的方式?
谢谢!
答案 0 :(得分:6)
我猜你没有在类接口中声明-nameOfMethod
,而是从另一个方法调用它,它的实现先于-nameOfMethod
的实现,即:
- (void)someMethod {
[self nameOfMethod];
}
- (void)nameOfMethod {
// …
}
当编译器正在解析-someMethod
且未在类接口中声明-nameOfMethod
时,它会生成警告,因为它还不知道-nameOfMethod
。
基本上有两种解决方案。您可以重新排序实施文件,以便在-nameOfMethod
之前显示-someMethod
,但这并非总是可行。更好的解决方案是在类接口中声明-nameOfMethod
。如果您的类的客户端应该调用-nameOfMethod
,请将其放在相应的头文件中。另一方面,如果-nameOfMethod
仅应在实现文件中调用,请使用类扩展。假设您的类名为SomeClass
,这就是您的标头和实现文件的样子:
// SomeClass.h
@interface SomeClass : NSObject {
// … instance variables
}
// … external methods
- (void)someMethod;
@end
// SomeClass.m
#import "SomeClass.h"
@interface SomeClass () // this is a class extension
// … internal methods
- (void)nameOfMethod;
@end
@implementation SomeClass
- (void)someMethod {
[self nameOfMethod];
}
- (void)nameOfMethod {
// …
}
@end
使用类扩展,方法实现的顺序无关紧要。
答案 1 :(得分:1)
您需要确保您的接口文件包含nameOfMethod的定义 - so;
-(void) nameOfMethod;
答案 2 :(得分:1)
您正确调用它,但请确保您的(void)方法的接口位于.h文件中。