2010-01-17 42 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文檔中提倡的方式。

相關問題