从字符串转换 NSURL

Posted

技术标签:

【中文标题】从字符串转换 NSURL【英文标题】:Convert NSURL from String 【发布时间】:2015-04-30 05:17:22 【问题描述】:

这几天我刚刚学习了 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 时似乎没有问题。 我能解释一下我的问题出在哪里吗?

【问题讨论】:

你用谷歌搜索过这个 ***.com/questions/6456605/nsstring-to-nsurl 看看这个... 【参考方案1】:
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);

【讨论】:

谢谢它帮助我,我认为 stringByAddingPrecentEscape 仅用于百分比字符。 @user1752973 如果对您有帮助,请接受我的回答 不要只是向我们扔代码。解释 OP 代码中出了什么问题以及您的代码有什么不同。 @MatthiasBauch 哦,我会...谢谢你的建议【参考方案2】:

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

这种看似复杂的方法的原因是 URL 的每个组成部分(参见 RFC 3986)需要的百分比编码略有不同,或者可能不需要。

query 组件的确切结构并未在 RFC 3986 中定义。通常,它是一个键/值对数组,将按照 w3.org 中的描述进行转义:x-www-form-urlencoded-encoding-algorithm。 NSURLComponents 也提供了对查询组件进行编码的方法。

【讨论】:

以上是关于从字符串转换 NSURL的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中将 NSURL 转换为字符串

带空格的字符串无法转换为 NSURL - Mantle

字符串未转换为 NSURL [SWIFT] [重复]

将文件路径转换为文件 url[NSUrl]

将 URL 转换为字符串并再次返回

将 NSString 转换为 NSURL 时面临的问题