2012-11-30 33 views
0

我在那裏,我試圖完成使用委託和調用基於被設定什麼選擇選擇的更通用的方法有一定的場景。使用委託其​​選擇

例如下面是代碼:

@protocol HttpRequestDelegate 
@optional 


- (void)testDrive:(NSData*)dataembedd; 

@end 


- (id)init { 

    self = [super init]; 

    if (self) { 

     //Initialize it here. 
     self.HttpRequestdelegate = self; 
    } 

    return self; 
} 

HttpRequest *apiCaller = [[HttpRequest alloc] init]; 
     NSLog(@"%@",apiCaller.HttpRequestdelegate); 
     [WLCC_ApiCaller executeAsync:apiCaller.HttpRequestdelegate :@selector(testDrive:) :[NSURL URLWithString:updateUrl] :wlcc_Get]; 

然而,在executeAsync叫我試圖調用選擇是試駕,如:

[delegate performSelector:@selector(selector) withObject:responseData]; 

,但它給了我的未知錯誤選擇器,但是當我注意到委託的引用它在初始化時是相同的。

我試圖利用委託不同的類進行選擇,還有什麼,除了我需要在這裏做什麼?

謝謝。

+2

你嘗試過*** [委託performSelector:selector withObject:responseData]; ***? – EmptyStack

+0

@EmptyStack我試過,我越來越 - [HttpRequest testDrive:]:無法識別的選擇發送到實例0x7c26520'error。 – kforkarim

+0

你如何聲明'HttpRequestdelegate'?什麼是'self.HttpRequestdelegate'? – iDev

回答

0

定義你的協議是這樣的:

@protocol HttpRequestDelegate <NSObject> 

有一個NSObject類和NSObject協議。所有的協議都應符合NSObject協議。這給你像respondsToSelector:和其他方法。

+0

@maddy,我試着這樣:if([delegate respondsToSelector:selector]){0} {0}} {委託performSelector:@selector(selector)withObject:responseData]; }在您的建議和繞過,如果聲明。如果我刪除這樣的語句,它會崩潰,同樣無法識別的錯誤 – kforkarim

+2

什麼是'selector'?你沒有顯示足夠的代碼來確定你需要什麼參數。無論哪種方式,你傳遞給'respondsToSelector:'和'performSelector:'的參數必須相同。在你的評論中,他們是不同的。 – rmaddy

+0

是的,你是正確的,它應該是performSelector:選擇器不是@selector btw這是一個修改我已經進行並得到委託工作.. HttpRequest * apiCaller = [[HttpRequest alloc] init]; [apiCaller setHttpRequestdelegate:[NSObjectAppDelegate class]]; – kforkarim

0

我想應該是;因爲看起來你正在實現其他函數,並試圖從那個沒有繼承委託的地方調用,並且可能會錯過那個特定的函數實現。

通常情況下,代理模式被用於所以我們可以根據我們的需要實現函數(或者可以說提供的回調),但該類必須符合你檢查它那delegate.Have?

請詳細瞭解您的實現,因爲我覺得這麼多的信息在後面像窗簾:WLCC_ApiCaller executeAsync等。

+0

Mohit,在我的情況下,因爲沒有特定的類設置委託,因此我將類的類型設置爲setDelegate:[Class name];這對我有效。我曾在某個地方看過同樣的內容。 – kforkarim