【问题标题】:NSURL URLWithString is shortening very long strings with an ellipsis "...", creating invalid NSURL objectsNSURL URLWithString 正在用省略号“...”缩短很长的字符串,创建无效的 NSURL 对象
【发布时间】:2015-06-10 18:49:16
【问题描述】:

我正在尝试使用 NSURL URLWithString 从一个可能很长的文件路径和一个很长的文件名创建一个 NSURL 对象。当我使用 URLWithString 将文件路径转换为 ​​NSURL 对象时,路径会缩短并且省略号“...”会放在 NSURL 中:

Path as NSString: /var/mobile/Containers/Data/Application/APPLICATION_ID/Documents/TEMP/this_is_a_really_really_and_i_mean_reaeeeeaaaallly_long_file_name/this_is_a_really_really_and_i_mean_reaeeeeaaaallly_long_file_name.xml

// Convert to NSURL using this technique:
[NSURL URLWithString:pathAsString]

Path as NSUrl:    /var/mobile/Containers/Data/Application/APPLICATION_ID/Documents/TEMP/this_is_a_really_really_and_ ... name.xml

我找不到解决此问题的任何方法,当我尝试在我尝试创建的 NSURL 处打开文件时出现错误,说没有这样的文件或目录:

Error Domain=NSCocoaErrorDomain Code=260 "The operation couldn’t be completed. (Cocoa error 260.)" UserInfo=0x15ec82b0 {NSFilePath=/var/mobile/Containers/Data/Application/APPLICATION_ID/Documents/TEMP/this_is_a_really_really_and_ ... name.xml, NSUnderlyingError=0x15eac4a0 "The operation couldn’t be completed. No such file or directory"}

我不知道为什么要添加省略号,我不知道如何解决这个问题。

【问题讨论】:

  • 能否添加有关如何生成路径的代码?

标签: ios nsstring nsurl


【解决方案1】:

你的代码

NSString *const path = @"/var/mobile/Containers/Data/Application/APPLICATION_ID/Documents/TEMP/this_is_a_really_really_and_i_mean_reaeeeeaaaallly_long_file_name/this_is_a_really_really_and_i_mean_reaeeeeaaaallly_long_file_name.xml";
NSURL *const url = [NSURL URLWithString:path];
NSLog(@"%@", url);
NSLog(@"%@", url.path);

打印

/var/mobile/Containers/Data/Application/APPLICATION_ID/Documents/TEMP/this_is_a_really_really_and_i_mean_reaeeeeaaaallly ... name.xml
/var/mobile/Containers/Data/Application/APPLICATION_ID/Documents/TEMP/this_is_a_really_really_and_i_mean_reaeeeeaaaallly_long_file_name/this_is_a_really_really_and_i_mean_reaeeeeaaaallly_long_file_name.xml

URL 已正确存储路径,NSURLs description 在记录 URL 时只是将其缩短。您的问题似乎出在其他地方。

【讨论】:

  • @Tobias NSFileReadNoSuchFileError = 260 是的,也许那个文件根本不存在?
  • 可能是这样。还要记住 iOS 文件系统是区分大小写的。但 OS X 文件系统通常不是。
  • 原来当我使用 URL 在其他地方创建 NSString 对象时出现错误。我正在使用 URL 处的文件内容创建一个 NSData 对象,但是当我将 URL 转换回 NSString 时,就会发生错误。如果我按照此答案中的建议使用 url.path 进行转换,则效果很好。
【解决方案2】:

您可能应该使用 NSURL 工厂方法。

+ (id)fileURLWithPath:(NSString *)path

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,因为 Apache Cordova 使用了 NSURL 到字符串的“直接”转换 - 这缩短了我的 URL 并破坏了我的移动应用程序和我的网络应用程序之间的接口。

    简单的解决方案是使用

    url.absoluteString

    而不仅仅是

    网址

    显然,即使是 Apache 的 iOS 破解者也没有意识到 NSURL 的这种奇怪行为。我也没想到会这样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-12
      • 2015-07-28
      • 1970-01-01
      • 2017-05-12
      • 2015-07-30
      • 1970-01-01
      相关资源
      最近更新 更多