微小URL的问题

时间:2010-07-01 13:51:38

标签: iphone objective-c nsstring nsurl

我正在为我的应用程序开发Twitter API。在我的应用程序中,我想在UITexField中以动态方式显示带有解析的xml链接的小URL。静态地,我能够在UITextField中显示小网址,但动态地我无法显示这个小网址。请帮帮我!

代码:静态(工作正常),

NSURL *url = [NSURL URLWithString"http://tinyurl.com/api-create.php?
url=https://gifts.development.xxxxx.edu/xxxx/Welcome.aspx?appealcode=23430"];

NSString *link = [NSString stringWithContentsOfURL:url encoding:NSASCIIStringEncoding    error:nil]; 

动态,

NSString * tiny = [NSString stringWithFormat:@"http://tinyurl.com/api-create.php? url=%@", shtUrl];//shtUrl is parsed string 

NSURL *url = [NSURL URLWithString:tiny];

NSString *link = [NSString stringWithContentsOfURL:url encoding:NSASCIIStringEncoding    error:nil]; 

在上面,动态app运行没有警告和错误,但url没有显示,当我检查调试器,url和链接都显示为nil值。但是shtUrl正确显示整个url值。

我尝试了所有NSURL类和实例方法以及String方法。

1 个答案:

答案 0 :(得分:1)

在你的代码的这一行:

NSString * tiny = [NSString stringWithFormat:@"http://tinyurl.com/api-create.php? url=%@", shtUrl];

'api-create.php?'之后有一个空格。这将导致您正在创建的格式化字符串中的空格,并可能导致URLWithString:无法解析该网址并返回nil。

删除多余的空间(假设它确实存在,而不仅仅是剪切粘贴错误),看看是否能解决问题。

你正在构建一个小小的shtUrl也可能包含需要进行urlencoded的特殊字符(即转义百分比。)尝试添加:

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/