Во-первых, вы блокируете основной поток, пока он ожидает завершения сетевой операции при вызове stringWithContentsOfURL:
, и это плохо, потому что, если сеть медленная или недоступна, будет выглядеть, как будто ваше приложение упало.
Во-вторых, stringWithContentsOfURL:
устарела, и вы должны использовать это вместо этого, даже если он все еще блокирует основной поток:
self.pageData = [NSString stringWithContentsOfURL:gpsURL encoding:NSUTF8StringEncoding error:nil];
Вы должны использовать NSURLConnection для загрузки данных без блокировкиосновная нить.Создайте NSURLRequest
из URL, передайте его [NSURLConnection connectionWithRequest:request delegate:self];
, который запускает соединение URL.
Вот некоторый код для делегата NSURLConnection:
- (void)connection:(NSURLConnection *)aConnection didReceiveResponse:(NSURLResponse *)response {
if ([response isKindOfClass: [NSHTTPURLResponse class]]) {
statusCode = [(NSHTTPURLResponse*) response statusCode];
/* HTTP Status Codes
200 OK
400 Bad Request
401 Unauthorized (bad username or password)
403 Forbidden
404 Not Found
502 Bad Gateway
503 Service Unavailable
*/
}
self.receivedData = [NSMutableData data];
}
- (void)connection:(NSURLConnection *)aConnection didReceiveData:(NSData *)data {
[self.receivedData appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)aConnection {
// Parse the received data
[self parseReceivedData:receivedData];
self.receivedData = nil;
}
- (void)connection:(NSURLConnection *)aConnection didFailWithError:(NSError *)error {
statusCode = 0; // Status code is not valid with this kind of error, which is typically a timeout or no network error.
self.receivedData = nil;
}