Невозможно загрузить NSURL с пробелами или хэштегами в приложении для iPhone

У Twitter есть замечательная функция, которая позволяет предварительно загружать сообщения о статусе в следующем формате:

http://twitter.com/?status=@HelloWorld Hello World

или альтернативно:

http://twitter.com/?status=%40HelloWorld%20Hello%20World

I Я пытаюсь добавить кнопку в свое приложение для iPhone, которое откроет Safari для указанного выше предварительно заполненного твита.

Однако я столкнулся с проблемой, когда знаки процента дублируются.

Вот код, который я пробовали:

Сначала пример того, что работает

NSString* urlText = @"http://www.twitter.com/home?status=@HelloWorld";
NSURL *url = [NSURL URLWithString: urlText];
if (![[UIApplication sharedApplication] openURL:(NSURL*)url])
        NSLog(@"%@%@",@"Failed to open url:",[url description]);

Этот код работает как шарм и выводит:

http://twitter.com/?status=%40HelloWorld

Код, который не работает

NSString* urlText = @"http://www.twitter.com/home?status=@HelloWorld Hello World";
NSURL *url = [NSURL URLWithString: urlText];
if (![[UIApplication sharedApplication] openURL:(NSURL*)url])
        NSLog(@"%@%@",@"Failed to open url:",[url description]);

Это создает нулевой NSURL. Это я могу только предположить, потому что URLWithString не принимает текст с пробелами в нем.

Итак, я попробовал этот код:

NSString* urlText = @"http://www.twitter.com/home?status=@HelloWorld%20Hello%20World";
NSURL *url = [NSURL URLWithString: urlText];
if (![[UIApplication sharedApplication] openURL:(NSURL*)url])
   NSLog(@"%@%@",@"Failed to open url:",[url description]);

Однако он создает URL:

http://twitter.com/?status=%40HelloWorld%2520Hello%2520World

Итак, я сбежал от знака процента%, который, конечно же, не то, что я задумал.

Конечно, люди говорили об использовании функции: stringByAddingPercentEscapesUsingEncoding

Итак, я написал этот код:

NSString* urlText = @"http://www.twitter.com/home?status=@HelloWorld%20Hello%20World";
urlText = [urlText stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL *url = [NSURL URLWithString: urlText];
if (![[UIApplication sharedApplication] openURL:(NSURL*)url])
    NSLog(@"%@%@",@"Failed to open url:",[url description]);

Однако вы снова получаете проблему двойного экранирования:

http://twitter.com/?status=%40HelloWorld%2520Hello%2520World

Я надеюсь, что кто-то может знать какую-то работать вокруг. В идеале я бы хотел также включить хэштеги, но пока просто добавление пробелов было бы огромным шагом вперед.

14
задан easwee 6 January 2015 в 09:30
поделиться