我有下面的類,這使得HTTP POST請求異步地避免在主UI線程上的問題:如何從異步NSURLConnection返回到調用類?
@implementation DataFeeder
-(void) doLookup:(NSString *)inputValue
{
NSString *myRequestString = [NSString stringWithFormat:@"val=%@", inputValue];
NSMutableData *myRequestData = [ NSMutableData dataWithBytes: [ myRequestString UTF8String ] length: [ myRequestString length ] ];
NSURL * myUrl = [NSURL URLWithString: @"http://mywebsite/results.php"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: myUrl];
[request setHTTPMethod: @"POST"];
[request setHTTPBody: myRequestData];
[request setTimeoutInterval:10.0];
[[NSURLConnection alloc] initWithRequest:request delegate:self];
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
responseData = [[NSMutableData alloc] init];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[responseData appendData:data];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
// Show error message
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
// Use responseData
// Got all my response data here, so build up an object ready to send back
}
@end
我調用上面的從我ViewController
使用下面的代碼行:
MyObject * myObj = [feeder doLookup:@"SomeStaticStringForNow"];
所以,這是我的理解是:
- 的
doLookup
將在異步 連接上執行請求。 - 當數據已經滿載,它會調用
connectionDidFinishLoading
- 一旦數據加載完成後,我將建立從響應數據的對象,我會發回給呼叫控制器
我怎麼讓呼叫控制器聽這個?我是否需要在ViewController中實現自己的回調方法,該方法將偵聽調用,然後停止微調並根據myObj
的內容更新UI?
我希望那裏有,我已經忽略了一個非常簡單的方法...
感謝
如何設置'delegate_',更重要的是,我在哪裏設置?當我在使用之前創建並初始化DataFeeder時,推測在'ViewController'中? – Jimmy
編輯我的答案,檢查出來。別的,只要問。 –
完美,幫助我!不像Android中的異步任務一樣優雅,但嘿嘿。 – Jimmy