Странная ошибка с initWithContentsOfURL - PullRequest
3 голосов
/ 05 января 2010

В настоящее время я работаю над чтением некоторого XML из внешнего API.

Следующий код работает нормально:

NSError *error = nil;

NSString *xmlString = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];

Однако я хотел добавить обработку ошибок («Не удается связаться с сервером», «Нет подключения к Интернету» и т. Д.). Итак, я поместил этот блок на место с небольшой помощью из примера кода Reachability:

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

Ответы [ 2 ]

0 голосов
/ 30 января 2012

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

0 голосов
/ 05 января 2010

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

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

...