URLWithString返回nil

时间:2012-11-30 00:18:54

标签: iphone objective-c ios nsfilemanager

我有这段代码:

NSString * logsPath = [dataDirectoryPath stringByAppendingPathComponent:@“Logs”];

返回:

/var/mobile/Applications/AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA/Documents/Mobile Documents/Data/Logs

然而,这样做:

NSURL *logsURL = [NSURL URLWithString:logsPath];

返回值为nil。

关于为什么会出现这种情况的任何想法?

3 个答案:

答案 0 :(得分:7)

请尝试使用+fileURLWithPath:

由于+URLWithString:需要协议(例如http://,https://,file://),因此无法构建网址。

另一方面,+fileURLWithPath:只接受原始路径,并自动将file://协议附加到您提供的路径。

答案 1 :(得分:0)

[NSURL urlWithString:logsPath]期望网址以https://或http://开头。 [dataDirectoryPath stringByAppendingPathComponent:@"Logs"];返回路径而不是网址。要解决此问题,请使用[NSURL fileURLWithPath:logsPath]。这会将file://添加到URL的开头,使其正常工作。 您的完整代码如下所示:

NSString *logsPath = [dataDirectoryPath stringByAppendingPathComponent:@"Logs"];
NSURL *logsURL = [NSURL fileURLWithPath:logsPath];

祝你好运!

答案 2 :(得分:0)

实际问题是URL路径中的空格是非法的。 -fileURLWithPath:有效,因为它对URI进行空间编码,而不是因为它添加了一个方案。

(lldb) po [NSURL URLWithString:@"/foo bar"]
nil
(lldb) po [NSURL URLWithString:@"/foo-bar"]
/foo-bar
(lldb) po [NSURL fileURLWithPath:@"/foo bar"]
file://localhost/foo%20bar
(lldb) po [NSURL URLWithString:@"/foo%20bar"]
/foo%20bar