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

时间:2015-06-10 18:49:16

标签: ios nsstring nsurl

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

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

3 个答案:

答案 0 :(得分:2)

您的代码

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

网址已正确存储路径,NSURL s description只是在记录网址时将其缩短。你的问题似乎在其他地方。

答案 1 :(得分:2)

您应该使用NSURL工厂方法。

+ (id)fileURLWithPath:(NSString *)path

答案 2 :(得分:1)

我遇到了同样的问题,因为Apache Cordova使用了"直截了当的"将NSURL转换为字符串 - 缩写了我的网址并破坏了我的移动应用和我的网络应用之间的界面。

简单的解决方案是使用

url.absoluteString

而不仅仅是

URL

显然,即使是Apache的iOS裂缝也没有意识到NSURL的这种奇怪行为。我也不会预料到这一点。