2012-12-21 82 views
5

-[NSFileManager URLForDirectory:inDomain:appropriateForURL:create:error:]需要一個NSSearchPathDomainMask並返回一個URL。 (...appropriateForURL:create:error:部分在文檔中有點令人困惑。)NSFileManager - URLsForDirectory ...或URLForDirectory

-[NSFileManager URLsForDirectory:inDomains:]允許您爲domains參數創建一個位掩碼並返回一個URL數組。

在我看來,這兩種方法之間有重疊。如果我的目標是從iOS應用程序的沙箱中獲取文檔或圖書館等目錄,那麼我應該什麼時候使用另一個?

回答

17

標準的方式來獲得訪問該文件的目錄(或其他類似的目錄)就像是代碼如下:

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的文件目錄,因爲它總是存在的。您應該爲應用程序支持目錄傳遞YES,因爲它默認情況下不存在。理想情況下,您不應該在nil中傳遞錯誤,以便在方法調用返回nil時可以看到發生了什麼。

這三種方法都有效。如果您想將路徑作爲字符串使用1st。如果您想將其作爲網址,請使用3rd。如果您很少需要傳入多個域,請使用2nd。

+4

從Apple的文檔:'您應該考慮使用NSFileManager方法URLsForDirectory:inDomains:和URLForDirectory:inDomain:appropriateForURL:create:error :.其中返回的是首選格式的網址。「 – edelaney05

+0

如果您需要網址,則爲true。如果你想將路徑作爲NSString,那麼我發佈的內容就很好。 – rmaddy

+0

@ edelaney05查看我更新的答案。 – rmaddy