NSURLConection - очень хорошее решение для асинхронной загрузки. Есть несколько шагов для его создания.
1. Настройте NSURLConnection
- (void)viewDidLoad {
// your code...
responseData = [[NSMutableData alloc] init];
NSURL *url = [NSURL URLWithString:@"http://yourdomain.com/"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self]];
}
responseData
- это ваш NSMutableData iVar.
2. Реализуйте методы делегата
a) В этом методе мы проверим коды состояния HTTP
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
if ([response respondsToSelector:@selector(statusCode)]) {
int statusCode = [((NSHTTPURLResponse *)response) statusCode];
if (statusCode >= 400) {
[connection cancel];
NSDictionary *errorInfo = [NSDictionary dictionaryWithObject:[NSString stringWithFormat:NSLocalizedString(@"Server returned status code %d",@""),statusCode] forKey:NSLocalizedDescriptionKey];
NSError *statusError = [NSError errorWithDomain:NSHTTPPropertyStatusCodeKey code:statusCode userInfo:errorInfo];
[self connection:connection didFailWithError:statusError];
}
}
}
b) Это создает ваш компонент NSData
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[responseData appendData:data];
}
в) Обрабатывает успешное соединение с URL-адресом
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
// do whatever you want using responseData as your server output
}
г) Обрабатывает ошибки
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
// handle your error
}
Вы можете получить информацию об ошибке, используя [error userInfo]
И отобразить ее, например, в UIAlertView.
<ч />
Итак, как я сказал, NSURLConnection - очень хорошее решение, , но , вам также следует обратиться к ASIHTTPRequest library . :)