Краткий ответ : Вы можете использовать
+ (NSURLConnection *)connectionWithRequest:(NSURLRequest *)request delegate:(id)delegate;
См. NSURLConnectionDelegate для неформального протокола делегата (все методы являются необязательными)
Длинный ответ :
Загрузка данных асинхронно не так проста, как синхронный метод. Сначала вы должны создать свой собственный контейнер данных, например, контейнер файла
//under documents folder/temp.xml
file = [[SomeUtils getDocumentsDirectory] stringByAppendingPathComponent:@"temp.xml"]
NSFileManager *fileManager = [NSFileManager defaultManager];
if(![fileManager fileExistsAtPath:file]) {
[fileManager createFileAtPath:file contents:nil attributes:nil];
}
При подключении к серверу:
[NSURLConnection connectionWithRequest:myRequest delegate:self];
Вы должны заполнить контейнер данными, которые вы получаете асинхронно:
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:file];
[fileHandle seekToEndOfFile];
[fileHandle writeData:data];
[fileHandle closeFile];
}
Вы должны управлять ошибками, возникающими при использовании:
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
Если вы хотите захватить ответ сервера:
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSHTTPURLResponse *)response
Ручка, когда соединение завершило загрузку:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection