NSURL URLWithString 正在使用省略号“...”缩短非常长的字符串,创建无效的 NSURL 对象

NSURL URLWithString is shortening very long strings with an ellipsis "...", creating invalid NSURL objects

我正在尝试使用 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"}

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

您的代码

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 时将其缩短。您的问题似乎出在其他地方。

您或许应该使用 NSURL 工厂方法。

+ (id)fileURLWithPath:(NSString *)path

我 运行 遇到了同样的问题,因为 Apache Cordova 使用 "straightforward" 将 NSURL 转换为字符串 - 缩写了我的 URL 并破坏了我的移动应用程序和我的网络应用程序之间的接口。

简单的解决方案是使用

url.absoluteString

而不只是

url

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