此代码的结果是url为null
NSString* home = [NSHomeDirectory() stringByAppendingPathComponent:@"/Library/Application Support/"];
NSURL *url = [NSURL URLWithString:home];
这是这样的:
NSString* home = [NSHomeDirectory() stringByAppendingPathComponent:@"/Library/Application Support/"];
home = [home stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:home];
答案 0 :(得分:10)
您的问题不是从包含空格的字符串创建网址,而是从包含空格的路径字符串创建。
对于路径,您不应使用URLWithString
。 Mac OS X和iOS包括便捷功能,用于为文件路径构建NSURL,以便自动处理此问题。请改用其中一个。
Apple的[NSURL fileURLWithPath: path]
文档说:
此方法假定 path 是一个以斜杠结尾的目录。如果 path 没有以斜杠结尾,则该方法会检查文件系统以确定 path 是文件还是目录。如果文件系统中存在 path 并且是目录,则该方法会附加一个尾部斜杠。如果文件系统中不存在 path ,则该方法假定它表示文件而不附加尾部斜杠。
作为替代方案,请考虑使用
fileURLWithPath:isDirectory:
,它允许您显式指定返回的NSURL
对象是否表示文件或目录。
此外,您应该使用NSSearchPathForDirectoriesInDomains
来查找应用程序支持目录。
把这些放在一起,你最终会得到这样的结果:
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSApplicationSupportDirectory, NSUserDomainMask, YES);
NSString *applicationSupportDirectory = [paths objectAtIndex:0];
NSURL *url = [NSURL fileURLWithPath: applicationSupportDirectory isDirectory: YES];
来源:
答案 1 :(得分:4)
您实际上需要添加百分比转义符,而不是删除它们:
NSString* home = [NSHomeDirectory() stringByAppendingPathComponent:@"/Library/Application Support/"];
NSURL *url = [NSURL URLWithString:[home stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSLog(@"%@", url);
打印:
2012-07-18 13:44:54.738 Test[1456:907] /var/mobile/Applications/FF6E6881-1D1B-4B74-88DF-06A2B62CCFE6/Library/Application%20Support
答案 2 :(得分:4)
Swift 2.0版本:
let encodedPath = path?.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())!
答案 3 :(得分:1)
首先,如果您实际上正在尝试获取应用程序的应用程序支持目录,请使用适当的方法处理作业(在本例中为NSFileManager
)并直接处理URL:
NSURL* appSupport = [[NSFileManager defaultManager] URLForDirectory: NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:NULL];
如果你真的想构建一个路径,那么使用适当的初始化程序,在这种情况下,告诉URL它是一个文件路径URL,这样它就会自然地处理空格,你可能会建立一个URL路径(这个示例更像是上面的代码):
NSString* home = [NSHomeDirectory() stringByAppendingPathComponent:@"/Library/Application Support/"];
// Here, use the appropriate initializer for NSURL
NSURL *url = [NSURL fileURLWithPath:home];
现在,URL将被正确地进行百分比编码,您将不会遇到任何问题(返回时不会为nil。)