我有这段代码:
NSString * logsPath = [dataDirectoryPath stringByAppendingPathComponent:@“Logs”];
返回:
/var/mobile/Applications/AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA/Documents/Mobile Documents/Data/Logs
然而,这样做:
NSURL *logsURL = [NSURL URLWithString:logsPath];
返回值为nil。
关于为什么会出现这种情况的任何想法?
答案 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