Вопрос

Я пытаюсь URL кодировать строку в моем приложении iOS 5 с помощью ARC.

Вот как я это делаю:

- (NSString *)escape:(NSString *)text
{
    return (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
                                          (__bridge CFStringRef)text, NULL,
                                          (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                                          kCFStringEncodingUTF8);
}

Затем я называю это с помощью тестовых данных, как это:

NSLog([self escape:@"kalel///&&&???"]);

Но вывод, который я получаю от NSLog это:

kalel0.0000000.0000000.00000022623F0.0000000.000000

Это просто не кажется правильным, но независимо от того, что я не могу сделать правильно

Это было полезно?

Решение

Ваш escape функция в порядке. Проблема в том, как вы звоните NSLog:

escape производит строку kalel%2F%2F%2F%26%26%26%3F%3F%3F для вашего ввода. NSLog интерпретирует эту строку как строку формата и печатает немного мусора в виде номеров с плавающей запятой сразу после kalel слово!

Вы всегда должны звонить NSLog с константой строки в качестве первого аргумента, например:

NSLog(@"%@", [self escape:@"kalel///&&&???"]);

Пса У вас есть утечка памяти escape --- вам следует return (__bridge_transfer NSString *) По мере того, как вы передаете сохраняемый объект CF в объективное пространство C.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top