0

我有这个代码:

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

返回:

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

但是,这样做:

NSURL *logsURL = [NSURL URLWithString:logsPath];

返回值为 nil。

关于为什么会这样的任何想法?

4

3 回答 3

7

尝试+fileURLWithPath:改用。

因为+URLWithString:需要一个协议(例如 http://、https://、file://),所以它无法构建 URL。

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

于 2012-11-30T00:22:01.417 回答
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
于 2013-12-13T00:32:12.450 回答
0

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

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

祝你好运!

于 2012-11-30T07:09:09.653 回答