2010-01-05 4 views
3

В настоящее время я работаю над чтением некоторых 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

+0

P.S .; 'initWithContentsOfURL:' является синхронным методом, поэтому либо оберните его в блок NSOperation/GCD, либо переключитесь на асинхронную сеть. –

ответ

0

Вы видите некоторую другую ошибку, чем kCFURLErrorNotConnectedToInternet. Сообщение об ошибке не исходит из вашей пользовательской ошибки, но создается некоторым объектом под капотом. Вам нужно сбрасывать userInfo dict ошибки, которую вы действительно получаете, чтобы увидеть детали. Я бы зарегистрировал его вместо того, чтобы использовать оповещение, чтобы убедиться, что вы все это получили.

Если UserInfo dict фактически пуст, я бы начал с проверки URL-адреса, чтобы увидеть, действительно ли он что-то возвращает. Попробуйте инициализировать объект данных и посмотреть, что вы получаете. Это будет сузить его между проблемой с URL-адресом и проблемой с преобразованием данных в строку.

+0

При подключении к Интернету XML загружается и помещается в объект string или touchxml просто отлично. Это когда я не подключен, мне нужна ошибка - это просто, что эта ошибка кажется неправильной! Богатые – Rich

0

Попробуйте это: 1) Создать NSData используя dataWithContentsOfURL 2) Нет создавать xmlString только тогда, когда NSData созданный ранее не равно нулю, то есть проходит проверки, если (данные)

Смежные вопросы