С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Как добавить JSON данные в GET запрос? - Программирование iOS

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование iOS Работа с Constraints http://www.cyberforum.ru/ios-dev/thread1116173.html
Доброго времени суток. Появился вопрос по поводу constraints. Написал код приложения, создал дизайн, все работает, но только на симуляторе iPhone 5 с дисплеем 4 дюйма. Как настроить constraints для...
Программирование iOS Среда разработки Подскажите пожалуйста какая среда разработки необходима и существует ли какой SDK ? http://www.cyberforum.ru/ios-dev/thread1116027.html
Серверная сторона для ios приложения Программирование iOS
нужно написать небольшую соц сеть под ios , подскажите на чем лучше серверную часть писать?
Программирование iOS Построение двух-колоночной таблицы в UITableView
Добрый день уважаемые товарищи! Хочу построить в UITableView обычную таблицу с двумя колонками. В ячейку (Cell) я динамически создаю 2 UITextView и хочу чтобы они меняли свою ширину и высоту в...
Программирование iOS Обновление UITableView после изменеия массива http://www.cyberforum.ru/ios-dev/thread1114469.html
Добрый день дорогие товарищи! Помогите пожалуста новичку разобраться с обновлением таблицы. В начале работы получаю массив из базы данных и отображаю его в таблице, потом делаю поиск по БД и...
Программирование iOS Начать изучение Xcode Где можно найти хороший учебник или видеокурс про Xcode? подробнее

Показать сообщение отдельно
aply
0 / 0 / 0
Регистрация: 19.11.2013
Сообщений: 40

Как добавить JSON данные в GET запрос? - Программирование iOS

12.03.2014, 12:10. Просмотров 934. Ответов 2
Метки (Все метки)

Есть словарь
Objective-C
1
2
3
4
NSMutableDictionary *filter = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                       @"", @"search",
                       [NSMutableArray array], @"keywords",
                       nil];
Надо отправить GET запрос с параметром filter в виде JSON.

Конвертирую словарь:
Objective-C
1
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:filter options:0 error:nil];
Далее получаю строку
Objective-C
1
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSASCIIStringEncoding];
Далее собираю строку URL
Objective-C
1
NSString *urlString = [MAINURL stringByAppendingFormat:@"api/...../filter=%@",jsonString];
Далее получаю URL из этой строки
Objective-C
1
NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding ]];
Ну и далее отправляю запрос через
Objective-C
1
2
3
4
5
6
NSURLSessionDataTask *dataTask=
    [session dataTaskWithURL:url
                completionHandler:^(NSData *data,
                                    NSURLResponse *response,
                                    NSError *error){......}];
[dataTask resume];

Но почему то не получаю ожидаемого ответа.

Objective-C
1
Делаю NSLog( @"url= %@",url)
И вижу, что запятые и двоеточия не конвертируются в URL.

То есть что-то вот такое выходит:
https://.....filter=%7B%0A%20%20%22keywords%22%20:%20%5B%0A%0A%20%20%5D,%0A%20%20%22search%22%20:%20%22%22%0A%7D

Почему так?

Добавлено через 18 часов 43 минуты
Пока нашел информацию, что запятые и двоеточия - это легальные символы URL, поэтому они не конвертируются через stringByAddingPercentEscapesUsingEncoding.

Решение для себя пока такое:
Objective-C
1
2
3
 filterString = [filterString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
 filterString = [filterString stringByReplacingOccurrencesOfString:@"," withString:@"%2C"];
 filterString = [filterString stringByReplacingOccurrencesOfString:@":" withString:@"%3A"];
Собираю urlString со строкой filterString через stringByAppendingFormat.
А NSURL получаю из urlString без кодирования:
Objective-C
1
 return [NSURL URLWithString:urlString];
Работает, но код не нравится.
Есть еще такой вариант кодировки filterString:
Objective-C
1
2
3
4
5
filterString = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL,
                                                                          (__bridge CFTypeRef)filterString,
                                                                          NULL,
                                                                          CFSTR(",:"),
                                                                          kCFStringEncodingUTF8));
Но старюсь не использовать то, в чем до конца не разобрался. Будет время, поизучаю этот CFURL...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.