Твиттер имеет приятную функцию, которая позволяет предварительно загружать сообщения о состоянии, используя следующий формат:
http://twitter.com/?status=@HelloWorld Hello World
или альтернативно:
http://twitter.com/?status=%40HelloWorld%20Hello%20World
Я пытаюсь добавить кнопку в свойПриложение для 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
Я надеюсь, что кто-то может знать какую-то работу вокруг.В идеале я хотел бы также включить хэштеги, но сейчас просто получить пробелы - это огромный шаг вперед.