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

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

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

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

06.09.2013, 11:52. Просмотров 586. Ответов 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 (Программирование iOS):

NSString в Int - Swift
Возможно ли вообще перейти от NSString к Int? Если да, то подскажите, каким образом?

Преобразование из NSString в BOOL - Программирование iOS
У меня есть строка NSString *out ; как мне ее преобразовать в BOOL?

Вырезка из NSString или NSMutableString - Программирование iOS
Есть строка NSString, ну или NSMutableString, можно получить любую из них. Нужно получить один символ. Допустим в строка "Информатика",...

Получить NSString из JSON и использовать его как заголовок в TableView - Программирование iOS
у меня в JSON файле есть вот такая строчка "titles of sections": мне нужно поставить каждую строку в заголовок соответствующей...

NSURL - Objective-C
Здравствуйте мне нужно выводить ссылку на сайт в *Label не просто текстом, а именно ссылка, чтобы можно было по ней тапнуть и перейти на...

Работа с NSArray, NSString - Objective-C
Вообщем программа довольно простая: Есть AddressBook которая хранит название и массив, каждым элементом которого является AddressCard. В...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Pro2005
44 / 44 / 3
Регистрация: 27.05.2013
Сообщений: 163
06.09.2013, 12:40 #2
Что говорит когда крешится ? urlStr -> Это точно NSString ? Ты уверен ?
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
06.09.2013, 13:29  [ТС] #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
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
06.09.2013, 14:32 #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  [ТС] #5
Круто! Спасибо, zulkis, красивое решение.
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
06.09.2013, 15:57 #6
kievkao, пожалуйста, рад, что тысячный мой комментарий оказался более-менее полезен
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2013, 15:57
Привет! Вот еще темы с ответами:

Смена кодировки NSString - Objective-C
ДВС, всем! На ГитХабе нашел парсер HTML (Objective-C-HMTL-Parser ), встроил его в свой проект, далее - получаю страницу, распарсиваю ее,...

Подсчет слов в строке типа NSString - Objective-C
Доброго времени суток.. Я начинающий программист на objective C, поэтому прошу помощи в решение следующей проблемы: Есть переменная S...

Инициализация в объявлении константных статических (const static) членов-данных класса. - C++
Привет. Подскажите пожалуйста почему нельзя создавать в классе const static float, а const static int можно? class A{ const...

int const * const foo(const int* param) const - разъясните значение квалификаторов - C++
int const * const foo(const int* param) const -----1------2----------3----------------4 1: ? 2: делает содержимое массива или...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
06.09.2013, 15:57
Ответ Создать тему
Опции темы

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