5

-[NSFileManager URLForDirectory:inDomain:appropriateForURL:create:error:]需要一个 NSSearchPathDomainMask 并返回一个 URL。(这...appropriateForURL:create:error:部分在文档中有点混乱。)

-[NSFileManager URLsForDirectory:inDomains:]允许您为 domain 参数创建位掩码并返回 URL 数组。

在我看来,这两种方法之间存在重叠。如果我的目标是从 iOS 应用程序的沙箱中获取 Documents、Library 或 etc 目录,我应该什么时候使用一个而不是另一个?

4

1 回答 1

18

访问 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];

您可以传递NODocuments 目录,因为它始终存在。您应该传递YES应用程序支持目录,因为它默认不存在。理想情况下,您不应该传递nil错误,这样您就可以看到如果方法调用返回时会发生什么nil

这三种方法中的任何一种都有效。如果要将路径作为字符串,请使用第一个。如果您想将其用作 URL,请使用第 3 个。如果您很少需要传入多个域,请使用第二个。

于 2012-12-21T01:36:12.823 回答