2013-10-02 1 views
0

Следующая часть кода работала в Xcode 4.5: в ViewController с изображением загружается файл из URL-адреса с описанием изображения: имя файла локализовано так, что правый файл будет загружен в зависимости от итальянских или английских настроек.XCode: после преобразования приложения в Xcode5 переменная NSURL равна нулю во время выполнения: она работала в предыдущей версии 4.5


NSString *stringaLocalizzata = (NSString *) NSLocalizedString(@"DISCO1_PAGE",nil); 
/* Localized file name that contains the object description in english or italian 
/* values: 1_locale_en.txt for english 
/*   1_locale.txt for italian 


NSString *bioLocaleUrl =[[[@"http://" stringByAppendingString:aConstrants.disco_url]stringByAppendingString:aConstrants.doc_dir] //stringByAppendingString:stringaLocalizzata]; 
     stringByAppendingString:stringaLocalizzata]; 

NSURL *bioLocaleUrlVersion = [NSURL URLWithString: bioLocaleUrl]; 
NSError *error = nil; 
NSString *bioLocaleWebVersion = [NSString stringWithContentsOfURL:bioLocaleUrlVersion encoding:1 error:&error]; 

_bioLocale.text=bioLocaleWebVersion; 

С Xcode5 не работает animore: в начале я думал, что это была проблема enconding, но реальная проблема заключается в том, что NSURL * bioLocaleUrlVersion = [NSURL URLWithString: bioLocaleUrl]; Результаты nil во время выполнения.

Если изменить код таким образом:


NSString *bioLocaleUrl =[[[@"http://" stringByAppendingString:aConstrants.disco_url]stringByAppendingString:aConstrants.doc_dir] //stringByAppendingString:stringaLocalizzata]; 
     stringByAppendingString:@"1_locale_en.txt"]; 

тогда * bioLocaleUrlVersion не будет ноль, и все работает. Конечно, я могу справиться с этим по-другому, но я хотел бы понять, в чем проблема. спасибо.

+0

Итак, похоже, что 'stringaLocalizzata' нарушает URL. Вы зарегистрировали его значение и полную строку URL? – trojanfoe

+0

спасибо за ваш ответ: конечно, если я положу всю строку URL-адреса, это работает: например, http://127.0.0.1/mobile/docs/1_locale_en.txt ", то есть локальный веб-сервер для моих разработок, он работает. –

ответ

1

Попытка создать объект NSURL с недопустимой строкой URL вернет nil. Что-то в вашем месиво stringByAppendingString: вызовов приводит к строке недействительный URL (см в верхней части ссылки NSURL класса для более подробной информации о том, что считается действительным.

Не зная значения bioLocaleUrl, я не могу дать более специфичным советы

Я настоятельно рекомендую использовать более подходящие процедуры в ОС, хотя по состоянию на прошивкой 7, NSURLComponents хорошая ставка:..

NSURLComponents *components = [[NSURLComponents alloc] init]; 
components.scheme = @"http"; 
components.host = aConstrants.disco_url; 
components.path = [aConstrants.doc_dir stringByAppendingPathComponent:stringaLocalizzata]; 

(на основе кода в вопросе, который, кажется разумным)

Для более старых версий ОС я предлагаю -[NSURL URLByAppendingPathComponent:] - твой друг.

+0

Hi , вот объяснение для моего URL-компонента: aConstant - это экземпляр объекта класса, который имеет значения, необходимые для приложения, и которые хранятся в базе данных sqlite: aConstant.disco_url хранит полностью квалифицированный домен (по причине конфиденциальности я не могу написать имя здесь): это может быть, например: aConstant.disco_url = @ "www.google.it" aConstant.doc_dir = @ "/ mobile/docs /" и stringaLocalizzata = @ "1_locale_en.txt". –

+0

Что действительно странно что в предыдущей версии xCode это сработало. Это единственная проблема, которая была у моего приложения при обновлении до iOS7: поэтому я не понимаю, почему URL-адрес предыдущей версии xCode был в порядке и теперь недействителен. –

+0

Ну, я довольно 'NSURL' не изменил своих требований к проверке для iOS 7. Если вы не можете сообщить нам фактическую строку, вам нужно будет самостоятельно прочитать RFC, чтобы понять, почему ваша строка URL недействительна. –