当方法签名存在时,Xode构建警告和“协议中找不到的方法”

时间:2010-01-17 21:24:11

标签: iphone objective-c xcode

当我尝试调用实现特定协议的类的实例时,我收到有关在协议签名中找不到该方法的警告。

  

警告:   '-requestCompleted:requestType:'not   在协议警告中找到:   '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

2 个答案:

答案 0 :(得分:4)

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

#import "ResponseProtocol.h"

答案 1 :(得分:0)

您是否尝试过id <ResponseProtocol> delegate代替NSObject <ResponseProtocol> *delegate?它似乎是Obj-C文档中提倡的方式。