Извлечение JSON с%20 в ссылке
У меня есть переменная date=@"2014-06-18 12:59:46" Я делаю следующее:
NSString* formated_date = [[Constants shared].date stringByReplacingOccurrencesOfString:@" " withString:@"%%20"];
что дает мне желаемый результат новой сформированной переменной: "2014-06-18%2012:59:46".
Теперь, когда я помещаю все это в строку, которая представляет URL, я не могу получить JSON
из приложения.
НО, когда я NSLog
сгенерированный URL-адрес и скопируйте его в браузер - все работает. Кроме того, если я возьму c / p Зарегистрированный URL и жестко закодирую его в запросе json, я получу требуемый json точно так же, как и предполагалось.
Это мой код до сих пор:
NSString* formated_date = [[Constants shared].date stringByReplacingOccurrencesOfString:@" " withString:@"%%20"];
NSString* url = [NSString stringWithFormat:
@"http://api.fessor.da.kristoffer.office/homework?rest&_rp[date]=%@&_rp[uuid]=%@&_rp[workspace]=parents&_rp[token]=%@&_rp[user_id]=%@&child_id=%@&type=parents&start_date=%@&end_date=%@",
formated_date,[Constants shared].uuid,[Constants shared].token,[Constants shared].user_id, [Constants shared].user_id,[Constants shared].start_date, [Constants shared].end_date
];
NSLog(url);
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
//Load the json on another thread
[Constants shared].jsonDataHomework = [[NSData alloc] initWithContentsOfURL:
[NSURL URLWithString:url"]];
dispatch_async(dispatch_get_main_queue(), ^{
[self getPresentHomework];
});
});
[self getPresentHomework]
затем возвращает ошибку, так как данные из JSON nil
,
Я повторяю еще раз, я получаю ноль данных, когда код для получения JSON выглядит так:
[Constants shared].jsonDataHomework = [[NSData alloc] initWithContentsOfURL:
[NSURL URLWithString:url]];
но если я жестко закодировать URL, то я получу желаемый результат
[Constants shared].jsonDataHomework = [[NSData alloc] initWithContentsOfURL:
[NSURL URLWithString:@"http://api.fessor.da.kristoffer.office/homework?rest&_rp[date]=2014-06-18%2012:59:46&_rp[uuid]=289A6F6F-BB71-444A-B16B-DCAF0070E1D3&_rp[workspace]=parents&_rp[token]=7fe3768108445570f11bf333cb821b0bee9213d2cced91a1f63f8c648fbc3e6a&_rp[user_id]=22066&child_id=22066&type=parents&start_date=2014-06-18&end_date=2014-06-18"]];
Что я делаю неправильно? Должен ли я изменить порядок потоков или что-то в этом роде?
2 ответа
Попробуйте добавить ваши параметры в строку URL без добавления процента, а затем используйте stringByAddingPercentEscapesUsingEncoding
прежде чем назначить его на ваш NSURL
,
NSString *urlString = [NSString stringWithFormat:
@"format your url"];
NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
Строка URL содержит специальный символ, поэтому используйте
NSString *strUrl=[@"http://api.fessor.da.kristoffer.office/homework?rest&_rp[date]=2014-06-18%2012:59:46&_rp[uuid]=289A6F6F-BB71-444A-B16B-DCAF0070E1D3&_rp[workspace]=parents&_rp[token]=7fe3768108445570f11bf333cb821b0bee9213d2cced91a1f63f8c648fbc3e6a&_rp[user_id]=22066&child_id=22066&type=parents&start_date=2014-06-18&end_date=2014-06-18" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];