从String转换NSURL

时间:2015-04-30 05:17:22

标签: ios objective-c

我刚刚学习了几天的Objective-C而且我对NSURL很困惑。这是我的代码

NSString *n = [NSString stringWithFormat:@"%@",@"http://somedomain.com/api/x?q={\"order_by\":[{\"field\":\"t\",\"direction\":\"desc\"}]}"];

NSURL *url = [[NSURL alloc ]initWithString:n];

NSLog(@"%@",url);

但是当我尝试打印url值时,它为null。 当我尝试在url中没有JSON参数的初始化url时似乎没问题。 我能解释一下我的问题吗?

2 个答案:

答案 0 :(得分:3)

NSString *n = [NSString stringWithFormat:@"%@",@"http://somedomain.com/api/x?q={\"order_by\":[{\"field\":\"t\",\"direction\":\"desc\"}]}"];

NSURL *url = [NSURL URLWithString:[n stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

NSLog(@"%@",url);

答案 1 :(得分:2)

从字符串组成URL的正确方法是使用NSURLComponents帮助程序类。

这种看似精心设计的方法的原因是网址的每个组成部分(请参阅RFC 3986)要求的编码百分比略有不同,或者可能没有。

但是,查询组件的确切结构未在RFC 3986中定义。通常,它是一组键/值对,将按照w3.org:x-www-form-urlencoded-encoding-algorithm中的描述进行转义。 "update venue set name=new_name,date=new_data..... where id=original_venue_id" 也提供了一种对查询组件进行编码的方法。