如何修复警告

时间:2010-12-04 14:01:26

标签: iphone warnings

在我的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

如何解决此类警告?

2 个答案:

答案 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;
相关问题