2012-12-21 11 views
5

-[NSFileManager URLForDirectory:inDomain:appropriateForURL:create:error:] wymaga jednej NSSearchPathDomainMask i zwraca pojedynczy adres URL. (Część ...appropriateForURL:create:error: jest nieco zagmatwana w dokumentacji.)NSFileManager - URLsForDirectory ... lub URLForDirectory

-[NSFileManager URLsForDirectory:inDomains:] pozwala utworzyć maskę bitową dla parametru domena i zwraca tablicę adresów URL.

Wydaje mi się, że te dwie metody pokrywają się. Jeśli moim celem jest pobranie folderu Dokumenty, Biblioteka lub etc z piaskownicy aplikacji na iOS, kiedy powinienem użyć jednego z nich zamiast drugiego?

Odpowiedz

17

Standardowy sposób, aby uzyskać dostęp do katalogu Documents (lub innych podobnych katalogów) jest kod jak poniżej:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = paths[0]; 

Przypomina to robi:

NSArray *URLs = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]; 
NSURL *documentsURL = URLs[0]; 

Kluczową różnicą jest pierwszy podaje ścieżkę jako NSString, a drugi podaje ścieżkę jako NSURL.

Druga metoda może być wykorzystywana przez robi:

NSURL *documentsURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil]; 

NO można przekazać do katalogu dokumentów, ponieważ zawsze istnieje. Powinieneś przekazać YES dla katalogu wsparcia aplikacji, ponieważ domyślnie nie istnieje. Najlepiej, jeśli nie powinieneś podawać nil dla błędu, aby zobaczyć, co się stanie, jeśli wywołanie metody powróci nil.

Każde z tych trzech podejść działa. Użyj pierwszego, jeśli chcesz, aby ścieżka była łańcuchem. Użyj trzeciej, jeśli chcesz, aby była adresem URL. Użyj drugiej, jeśli masz rzadką potrzebę przekazania więcej niż jednej domeny.

+4

Z dokumentacji firmy Apple: 'Należy rozważyć użycie metod NSFileManager URLsForDirectory: inDomains: i URLForDirectory: inDomain: properForURL: create: error :. która zwraca adresy URL, które są preferowanym formatem. " – edelaney05

+0

To prawda, jeśli chcesz mieć adresy URL. Jeśli chcesz ścieżki jako NSString, to co napisałem jest w porządku. – rmaddy

+0

@ edelaney05 Zobacz moją zaktualizowaną odpowiedź. – rmaddy

Powiązane problemy