2012-09-13 19 views
3

我是一個iOS新手。我想爲Http執行指定一個成功回調。但是,這是另一類。我將如何指定它?我試過以下 -iOS - 如何指定從另一個類的回調?

[request setDidFinishSelector: @selector([[MyHttpCallbacks get] successHttpMethod]:)]; 

回調函數是在MyHttpCallbacks中定義的。這不起作用。如果我在同一類中定義方法並像這樣使用它,它可以正常工作 -

[request setDidFinishSelector: @selector(successHttpMethod:)]; 

任何幫助,將不勝感激。

回答

4
MyHttpCallbacks *callbacks = [[MyHttpCallbacks alloc] init]; 
request.delegate = callbacks; 
+2

的確如此簡單。 – Till

+0

哇,那很容易。 – Suchi

0

我相信天生就是你想達到的目標是不可能的(除非有人有黑客,我不知道)。我多次遇到這個問題,不得不改變我的設計,並將回調包含在創建它的同一個類中。

雖然,想起來了。 (這是一個建議,我沒有嘗試自己)你可以讓你的回調類「include」在main中,然後從那裏調用一個選擇器函數來調用回調函數。不是一個非常有效的破解,但我認爲它會起作用。

因此,像這樣:

[request setDidFinishSelector: @selector(callbackFunction)]; 

隨着回調在同一類:

- (void)callbackFunction { 
    [MyHttpCallbacks get] successHttpMethod]; 
} 

凡successHttpMethod位於另一個類,你把它作爲一個進口。

1

我有同樣的問題,我(對我來說ServerComm)作出的HTTP處理類調用委託方法。

ServerComm.h我在末尾添加

@interface NSObject (ServerCommDelegate) 
- (void)finishedLoading:(NSString*)result success:(BOOL)success; 
@end 

ServerComm.m

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    ... 

    if ([delegate respondsToSelector:@selector(finishedLoading:success:)]) { 
     [delegate finishedLoading:aStr success:YES]; 
    }  
} 

在主類創建實例

serverCommObj.delegate = self; 

,然後方法後

- (void)finishedLoading:(NSString*)result success:(BOOL)success 
{ 
    if (!success) { 
     ... 
    } else { 
     ... 
    }  
} 
相關問題