В этой строке вашего кода:
NSString * tiny = [NSString stringWithFormat:@"http://tinyurl.com/api-create.php? url=%@", shtUrl];
после «api-create.php?» Есть пробел.Это приведет к пробелу в форматированной строке, которую вы создаете, и, вероятно, приведет к тому, что URLWithString:
не сможет проанализировать URL-адрес и вернуть nil.
Удалите лишний пробел (при условии, что он действительно есть и непросто ошибка вырезания и вставки), и посмотрите, решит ли это проблему.
Возможно также, что shtUrl
, для которого вы создаете tinyurl, содержит специальные символы, которые необходимо будет кодировать по урлену (т. е. процентизбежал.) Попробуйте добавить это:
NSString * encodedShtUrl = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
(CFStringRef)shtUrl,
NULL,
(CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",
kCFStringEncodingUTF8 );
для кодирования shtUrl
, затем используйте encodedShtUrl
при создании tiny
:
NSString * tiny = [NSString stringWithFormat:@"http://tinyurl.com/api-create.php? url=%@", encodedShtUrl];
См. http://simonwoodside.com/weblog/2009/4/22/how_to_really_url_encode/ чтобы узнать больше о побеге.