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