Извлечение 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];
Другие вопросы по тегам