如何修复警告

问题描述:

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

如何解决这种警告?

你可以给委托精确类型:

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]; 
} 
+0

有的时候我会用委托来播放音乐,您不会有任何错误。像[代表戏];委托=> AVAudioPlayer。 – jfalexvijay 2010-12-04 14:19:59

它可能不是最好的办法,但我见过大多数人使用代表使用fol低位模式:

if ([delegate respondsToSelector:@selector(yourMethod)]) { 
    [delegate performSelector:@selector(yourMethod)]; 
} 

您可以使用performSelector:withObject添加参数,并且还有方法允许您在其他线程中执行选择器。

,如果你宣布你的代表像

id delegate; 

NSObject<DelegateProtocol> * delegate;