initWithContentsOfURL часто возвращает ноль

NSError *error;
NSString *string = [[NSString alloc]
                    initWithContentsOfURL:URL
                    encoding:NSUTF8StringEncoding
                    error:&error];

Когда я проверяю это на моем iPhone, он всегда работает, когда у меня включен Wi-Fi. Однако, когда я нахожусь на 3G, я часто получаю ноль. Если я попытаюсь, возможно, 15 раз подряд (для этого у меня есть кнопка обновления), я, наконец, получу желаемый результат.

У меня вопрос, находится ли эта проблема на стороне сервера или мой код нестабилен? Должен ли я использовать другой подход, чтобы получить более безопасный выбор данных?

2 ответа

Решение

Я сейчас использую вместо этого STHTTPRequest. Я очень рекомендую эту библиотеку, простую в использовании, но мощную.

Вы не предоставили достаточно информации, чтобы дать что-либо кроме неопределенного ответа, но у вас есть некоторые варианты здесь.

Самое главное, у вас естьerror"параметр, который вы должны распечатывать результаты. Есть также немного лучший API, который вы могли бы использовать в классе NSString.

Измените свой код на что-то вроде этого:

NSError *error = NULL;
NSStringEncoding actualEncoding;

// variable names in Objective-C should usually start with lower case letters, so change
// URL in your code to "url", or even something more descriptive, like "urlOfOurString"
NSString *string = [[NSString alloc] initWithContentsOfURL:urlOfOurString usedEncoding:&actualEncoding error:&error];
if(string)
{
    NSLog( @"hey, I actually got a result of %@", string);

    if(actualEncoding != NSUTF8StringEncoding)
    {
        // I also suspect the string you're trying to load really isn't UTF8
        NSLog( @"and look at that, the actual encoding wasn't NSUTF8StringEncoding");
    }
} else {
    NSLog( @"error when trying to fetch from URL %@ - %@", [urlOfOurString absoluteString], [error localizedDescription]);
}
Другие вопросы по тегам