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]);
}