У меня есть следующий класс, который делает запрос HTTP POST асинхронно, чтобы избежать проблем на основной поток пользовательского интерфейса:Как вы возвращаетесь из асинхронного 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
?
Я надеюсь, что Theres действительно простой способ, что я упускать из виду ...
Спасибо
Как установить 'делегат_', и что более важно, где его установить? Предположительно, в «ViewController», когда я создавал и инициализировал «DataFeeder» перед использованием? – Jimmy
Отредактировал свой ответ, проверьте его. Что-нибудь еще, просто спроси. –
Отлично, это помогло мне! Не так элегантно, как задачи Async в android, но hey ho. – Jimmy