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