在我的iPhone项目中,我收到“找不到方法名称”,“找到名为'method_name'的多个方法”警告消息。
// in TestFirst.h
-(void) testMethod:(int)a;
// in TestFirst.m
TestSecond *ts = [[TestSecond alloc] init];
ts.delegate = self;
// in TestSecond.h
id delegate;
// in TestSecond.m
[delegate testMethod: 5]; // Warning: method name not found
如何解决此类警告?
答案 0 :(得分:3)
您可以为代理人提供精确的类型:
TestFirst *delegate;
或者您可以创建协议:
@protocol SomeDelegate
- (void) testMethod: (int) a;
@end
@interface TestFirst : NSObject <SomeDelegate> {…}
@end
@interface TestSecond : NSObject
@property(assign) id <SomeDelegate> delegate;
@end
或者您可以保持动态输入并导入正确的标题:
@interface TestSecond : NSObject {…}
@property(assign) id delegate;
@end
#import "TestFirst.h" // or AVAudioPlayer or whatever
@implementation TestSecond
- (void) somewhere {
[delegate testMethod:5];
}
答案 1 :(得分:0)
这可能不是最好的方法,但我看到大多数人使用以下模式使用委托:
if ([delegate respondsToSelector:@selector(yourMethod)]) {
[delegate performSelector:@selector(yourMethod)];
}
您可以使用performSelector:withObject:添加参数,还有一些方法允许您在其他线程中执行选择器。
如果您宣布您的代表
,则不会有任何错误id delegate;
或
NSObject<DelegateProtocol> * delegate;