【问题标题】:NSURL "URLByAppendingPathExtension:" bug?NSURL“URLByAppendingPathExtension:”错误?
【发布时间】:2015-01-21 03:49:25
【问题描述】:

NSURLURLByAppendingPathExtension: 对我来说似乎表现不佳。我正在尝试将路径添加到现有 URL 的末尾。例如:

[[NSURL URLWithString:@"https://www.example.com"] URLByAppendingPathExtension:@"/10392983/example"]

根据documentation,应该返回一个带有http://www.example.com/10392983/example 的URL。相反,它正在逃避斜线。我可以实现将 URL 转换为绝对字符串并使用常规 NSString 操作的相同结果,但上面看起来会更加优雅。关于使用哪种 NSURL 方法来实现这个结果或者这真的是一个错误有什么想法吗?

【问题讨论】:

    标签: ios objective-c nsurl


    【解决方案1】:

    对于你想要做的事情,你应该使用:

    URLByAppendingPathComponent
    

    根据文档,URLByAppendingPathExtension 用于 .html 等扩展名。这有点模糊,但来自文档:

    如果原始 URL 以一个或多个正斜杠结尾,则这些是 从返回的 URL 中删除。在两者之间插入一个句点 新网址的一部分。

    这让我觉得这应该只用于将 .html 和 .php 之类的内容附加到 URL。只需改用URLByAppendingPathComponent

    【讨论】:

      【解决方案2】:

      NSURL 可能会让人感到困惑和奇怪。

      URLByAppendingPathExtension 的文档说:

      “如果原始 URL 以一个或多个正斜杠结尾,则这些正斜杠将从返回的 URL 中删除。在新 URL 的两个部分之间插入一个句点。”

      “从返回的 URL 中删除”意味着这些“/”正斜杠字符将被其转义的对应字符替换(即正斜杠的 % 符号)。

      @scott 的答案中的 UrlByAppendingPathComponent 在我的测试中似乎不起作用?该方法需要用大写的“URL”而不是小写的“Url”拼写为“URLByAppendingPathComponent”。

      试试这个:

      [NSURL URLWithString:[@"https://www.example.com" stringByAppendingPathComponent:@"/10392983/example"]]
      

      这将产生具有相似级别的优雅复杂性的 NSURL。您还可以添加任意数量的“stringByAppendingPathComponent”方法来生成您的 NSURL。

      相反,这是上面 scott 代码的示例:

      NSURL*combined = [baseURL URLByAppendingPathComponent: stringPath];
      

      【讨论】:

      • 问题是我正在使用 URL,不想在 NSString 之间来回转换。我有一个“基本 URL”(example.com),上面需要转换为 NSString,重点是,我希望能够从 URL 创建新 URL,而不会增加复杂性。此外,在我的示例中,您提到“如果 URL 以一个或多个正斜杠结尾”,在我的测试中,它没有以任何正斜杠结尾。
      • 您的原始代码以两个字符串作为输入,答案以两个字符串作为输入。我的建议使用与原始答案相同数量的字符串并生成一个 NSURL。我的意思是如果你根本不想使用字符串,那么你不应该使用 [NSURL URLWithString:@""]。真的没有任何方法可以让您创建一个 NSURL 而不先给它提供某种字符串。你可以试试: NSURL* first = [NSURL URLWithString:@"example.com"]; NSURL* second = [first URLByAppendingPathComponent:@"/10392983/example"];
      • 为了这个例子,我包含了两个字符串,但是正在生成 NSURL。我的意思是,我正在尝试操作 NSURL 对象。
      • 所以你想做“NSURL + NSURL = NEWNSURL”?我认为这行不通。 NSURL 不是带有斜线的单词序列,它是一个 url。换句话说,“example.com”将是存储在 NSURL 中的有效内容,但“/10392983/example”实际上不会是存储在 NSURL 中的有效内容,因为它不是 url。所以真的没有办法将第二件事存储为 NSURL。
      • 我正在尝试做 NSURL(基本 URL)+ NSString(路径)= NSURL(组合),而不必将基本 URL 转换为字符串。理想情况下,诸如“URLByAppendingPathExtension:”之类的方法可以做到这一点。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-25
      • 2011-03-20
      • 2011-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多