【问题标题】:Convert NSURL from String从字符串转换 NSURL
【发布时间】: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 时似乎没有问题。 我能解释一下我的问题出在哪里吗?

【问题讨论】:

标签: ios objective-c


【解决方案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-algorithmNSURLComponents 也提供了对查询组件进行编码的方法。

【讨论】:

    猜你喜欢
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 2012-03-30
    • 2016-06-04
    • 2016-02-04
    • 1970-01-01
    相关资源
    最近更新 更多