如何修复警告
问题描述:
在我的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];
}
答
它可能不是最好的办法,但我见过大多数人使用代表使用fol低位模式:
if ([delegate respondsToSelector:@selector(yourMethod)]) {
[delegate performSelector:@selector(yourMethod)];
}
您可以使用performSelector:withObject添加参数,并且还有方法允许您在其他线程中执行选择器。
,如果你宣布你的代表像
id delegate;
或
NSObject<DelegateProtocol> * delegate;
有的时候我会用委托来播放音乐,您不会有任何错误。像[代表戏];委托=> AVAudioPlayer。 – jfalexvijay 2010-12-04 14:19:59