Twitter имеет приятную функцию, которая позволяет предварительно загружать сообщения о состоянии в следующем формате:
http://twitter.com/[email protected] Hello World
или, альтернативно:
http://twitter.com/?status=%40HelloWorld%20Hello%20World
Я пытаюсь добавить кнопку в мое приложение для iPhone, которое откроет Safari для вышеуказанного предварительно заполненного твита.
Однако я столкнулся с проблемой, когда процентные знаки удваиваются.
Вот код, который я пробовал:
Сначала пример того, что работает
NSString* urlText = @"http://www.twitter.com/[email protected]";
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/[email protected] 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/[email protected]%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/[email protected]%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
Я надеюсь, что кто-то может знать какую-то работу. В идеале я хотел бы также включить хэштеги, но пока просто пробелы в них станут огромным шагом вперед.