-[NSFileManager URLForDirectory:inDomain:appropriateForURL:create:error:]
需要单个NSSearchPathDomainMask并返回单个URL。 (...appropriateForURL:create:error:
部分在文档中有点令人困惑。)
-[NSFileManager URLsForDirectory:inDomains:]
允许您为domains参数创建位掩码并返回一个URL数组。
在我看来,这两种方法之间存在重叠。如果我的目标是从iOS应用程序的沙箱中获取Documents,或Library或etc目录,我应该何时使用另一个?
答案 0 :(得分:17)
访问Documents目录(或其他类似目录)的标准方法是以下代码:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = paths[0];
这类似于:
NSArray *URLs = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
NSURL *documentsURL = URLs[0];
关键区别在于第一个为NSString
提供路径,而第二个为NSURL
提供路径。
可以通过以下方式使用另一种方法:
NSURL *documentsURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
您可以将NO
传递给Documents目录,因为它始终存在。您应该将YES
传递给应用程序支持目录,因为默认情况下它不存在。理想情况下,您不应传入nil
以查找错误,以便在方法调用返回nil
时看到发生了什么。
这三种方法中的任何一种都有效。如果您希望路径为字符串,请使用1st。如果您希望将其作为URL,请使用第3个。如果你很少需要传递多个域,请使用第二个。