2010-01-17 47 views
0

当我尝试调用实现特定协议的类的实例时,我收到有关在协议签名中找不到方法的警告。当方法签名确实存在时,Xode生成警告和“在协议中找不到的方法”

警告: '-requestCompleted:的RequestType:' 不 在协议(一个或多个)警告实测值: 'NSObject的' 可以不 响应 '-requestCompleted:的RequestType:'

我不能没有看到这个警告的原因,所以我把这些没有改变的类复制到一个单独的项目中。当我构建新项目时,不会生成警告。

当我在原始项目中执行代码时,一切正常 - 只是在构建过程中显示警告,我希望它们消失。

我已经尝试清理我的构建目标并删除构建目录中的文件。我没有看到那是什么导致警告?

//文件中的一个

@protocol ResponseProtocol 

- (void)requestCompleted:(NSDictionary *)responseData requestType:(ConnRequestType)lastRequestType; 

@end 

如何,我叫它:

@interface BaseClass : NSObject 

    __weak NSObject <ResponseProtocol> *delegate;  
} 

- (void)doSomething; 

@end 

@implementation BaseClass 

- (void)doSomething 
{ 
    SEL aSelector = @selector(requestCompleted:requestType:) 
    if ((delegate != nil) && [delegate respondsToSelector:aSelector]) 
    { 
     ConnRequestType aRequestType = ...; 
     NSDictionary *aResponseData = [NSDictionary dictionary]; 

     // the following line generates the warnings: 
     [delegate requestCompleted:aResponseData requestType:aRequestType]; 
    } 

} 

@end 

回答

4

确保您正在导入正确的头文件中的BaseClass.h文件:

#import "ResponseProtocol.h" 
+0

而且,顺便说一下,如果您使ResponseProtocol符合NSObject协议,则可以使您的委托ivar类型为“id”。 – 2010-01-17 21:37:58

0

您是否试过id <ResponseProtocol> delegate而不是NSObject <ResponseProtocol> *delegate?这似乎是Obj-C文档中提倡的方式。

相关问题