Форум программистов, компьютерный форум CyberForum.ru

Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
#1

NSString *const и инициализация им NSURL - Программирование iOS/iPhone

06.09.2013, 11:52. Просмотров 574. Ответов 5
Метки нет (Все метки)

Добрый день!

Что можете посоветовать в такой ситуации:
Разбираю данные после парсинга JSON, получаю на определенном этапе NSArray со string'ами-ссылками, пытаюсь инициализировать ими NSURL и все рушится.
Посмотрел детальней - оказывается, что обычная строка в окне просмотра переменных имеет отображение вида "(NSString *) 0x...", а полученная мною строка после парсинга - "(NSString *const) 0x...".

Objective-C
1
2
for (NSString *urlStr in imgLinks) {
        NSURL *url = [NSURL URLWithString:urlStr];     // тут наступает крэш
Каким образом можно преобразовать такое значение в удобоваримое для инициализации NSURL?
Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2013, 11:52     NSString *const и инициализация им NSURL
Посмотрите здесь:

Objective-C NSURL
Вырезка из NSString или NSMutableString
Инициализация вью
Преобразование из NSString в BOOL
Получить NSString из JSON и использовать его как заголовок в TableView
Подсчет слов в строке типа NSString Objective-C
Objective-C Объясните, что это: "static const uint32_t collisionCategory = 0x1 << 0"?
Objective-C Смена кодировки NSString
Работа с NSArray, NSString Objective-C
Swift Не проходит инициализация
Swift NSString в Int
Инициализация в объявлении константных статических (const static) членов-данных класса. C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pro2005
44 / 44 / 3
Регистрация: 27.05.2013
Сообщений: 163
06.09.2013, 12:40     NSString *const и инициализация им NSURL #2
Что говорит когда крешится ? urlStr -> Это точно NSString ? Ты уверен ?
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
06.09.2013, 13:29  [ТС]     NSString *const и инициализация им NSURL #3
Цитата Сообщение от Pro2005 Посмотреть сообщение
Что говорит когда крешится ? urlStr -> Это точно NSString ? Ты уверен ?
Хм, знаете, после ваших слов я посмотрел и теперь уже не уверен, что получаю именно строку.. Результат такой:
"Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI length]: unrecognized selector sent to instance"
Почему-то речь идет о массиве..
Разбираю данные после парсинга я таким образом (получаю массив словарей),

Objective-C
1
2
3
4
5
6
NSArray *dataObject = [jsonParser objectWithString:result];
  
NSArray* firstNames = [dataObject valueForKey:@"items"];
NSArray* pagemap = [firstNames valueForKey:@"pagemap"];
NSArray* images = [pagemap valueForKey:@"cse_image"];
NSArray* imgLinks = [images valueForKey:@"src"];
Добавлено через 42 минуты
Проблема решена!

Оказалось, несмотря на то, что массив imgLinks представлял собой на первый взгляд единичные элементы, каждый из них являл собой еще один массив.
Сделал следующим образом и стало все хорошо:
Objective-C
1
2
3
for (NSArray *urlArr in imgLinks) {
        NSString* str = [urlArr objectAtIndex:0];
        NSURL *url = [NSURL URLWithString:str];
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
06.09.2013, 14:32     NSString *const и инициализация им NSURL #4
Цитата Сообщение от kievkao Посмотреть сообщение
Objective-C
1
2
3
for (NSArray *urlArr in imgLinks) {
* * * * NSString* str = [urlArr objectAtIndex:0];
* * * * NSURL *url = [NSURL URLWithString:str];
Лучше так:
Objective-C
1
2
3
4
5
for (NSArray *urlArr in imgLinks) {
  NSString* str = [urlArr lastObject];
  NSURL *url = [NSURL URLWithString:str];
...
}
А учитывая то, что там "почему-то массив вместо строки", лучше вот так:
Objective-C
1
2
3
4
5
6
7
8
9
10
for (id aObject in imgLinks) {
    NSString* str = nil;
    if ([aObject isKindOfCLass:[NSArray class]]){
      str = [aObject lastObject];
    } else if ([aObject isKindOfCLass:[NSString class]]) {
      str = aObject;
    }
    NSURL *url = [NSURL URLWithString:str];
...
}
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
06.09.2013, 14:34  [ТС]     NSString *const и инициализация им NSURL #5
Круто! Спасибо, zulkis, красивое решение.
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
06.09.2013, 15:57     NSString *const и инициализация им NSURL #6
kievkao, пожалуйста, рад, что тысячный мой комментарий оказался более-менее полезен
Yandex
Объявления
06.09.2013, 15:57     NSString *const и инициализация им NSURL
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru