В настоящее время я работаю над чтением некоторых XML из внешнего API.Странная ошибка с initWithContentsOfURL
Следующий код работает отлично:
NSError *error = nil;
NSString *xmlString = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
Однако, я хотел бы добавить некоторые обработку ошибок («Сервер не может быть достигнуто», «Нет подключения к Интернету» и т.д.). Итак, я ставлю этот блок в месте с небольшой помощью образца кода достижимости:
if ([error code] == kCFURLErrorNotConnectedToInternet) {
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:NSLocalizedString(@"No Internet connection",@"Error message displayed when not connected to the Internet.") forKey:NSLocalizedDescriptionKey];
NSError *noConnectionError = [NSError errorWithDomain:NSCocoaErrorDomain code:kCFURLErrorNotConnectedToInternet userInfo:userInfo];
[self handleError:noConnectionError];
} else {
// otherwise handle the error generically
[self handleError:error];
}
Метод HandleError просто отображает UIAlertView с деталями ошибки в. Когда я запускал приложение без подключения, я ожидал увидеть мое сообщение об ошибке. Тем не менее, все, что я когда-либо получал, - «Операция не может быть завершена (ошибка какао 256)», которая из того, что я могу собрать, является общей ошибкой чтения.
Сначала я подумал, что это может быть просто метод TouchXML, но, как вы можете видеть, я изменил это на initWithCOntentsOfURL в NSString.
Может ли кто-нибудь пролить свет на эту проблему?
Спасибо,
Rich
P.S .; 'initWithContentsOfURL:' является синхронным методом, поэтому либо оберните его в блок NSOperation/GCD, либо переключитесь на асинхронную сеть. –