2012-12-21 11 views
5

-[NSFileManager URLForDirectory:inDomain:appropriateForURL:create:error:] richiede un singolo NSSearchPathDomainMask e restituisce un singolo URL. (La parte ...appropriateForURL:create:error: è un po 'confusa nella documentazione.)NSFileManager - URLsForDirectory ... o URLForDirectory

-[NSFileManager URLsForDirectory:inDomains:] consente di creare una maschera di bit per il parametro domini e restituisce una matrice di URL.

Mi sembra che ci sia una sovrapposizione tra questi due metodi. Se il mio obiettivo è ottenere la cartella Documenti, o Libreria, o ecc dalla sandbox di un'app iOS, quando dovrei usarne una sull'altra?

risposta

17

Il metodo standard per ottenere l'accesso alla directory Documenti (o altre directory simili) è il codice come il seguente:

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

Questo è simile a fare:

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

La differenza chiave è il primo ti dà il percorso come NSString mentre il secondo ti dà il percorso come NSURL.

L'altro metodo può essere utilizzato da fare:

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

È possibile passare NO per la directory Documenti perché esiste sempre. È necessario passare YES per la directory di supporto dell'applicazione poiché non esiste per impostazione predefinita. E idealmente non dovresti passare in nil per l'errore in modo da poter vedere cosa è successo se la chiamata al metodo restituisce nil.

Uno di questi tre approcci funziona. Usa il 1 se vuoi il percorso come una stringa. Usa il 3 ° se lo vuoi come URL. Usa il 2 ° se hai la rara necessità di passare in più di un dominio.

+4

Dalla documentazione Apple: 'È necessario considerare l'utilizzo dei metodi NSFileManager URLForDirectory: inDomains: and URLForDirectory: inDomain: appropriateForURL: create: error :. quali URL di ritorno, che sono il formato preferito. – edelaney05

+0

Questo è vero se si desidera che gli URL. Se vuoi il percorso come NSString, allora quello che ho postato va bene. – rmaddy

+0

@ edelaney05 Vedere la mia risposta aggiornata. – rmaddy

Problemi correlati