2011-04-09 19 views
34

Questo codice è una parte di Core Data. Il metodo URLsForDirectory .... non funziona su iOS < 4 quindi ho bisogno di conoscere altri metodi/oggetti da chiamare. Vorrei anche apprez- zare la documentazione per riferimenti futuri. GrazieCome ottenere l'URL per la directory dei documenti dell'applicazione iPhone

/** 
Returns the URL to the application's Documents directory. 
*/ 
- (NSURL *)applicationDocumentsDirectory 
{ 
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; 
} 
+0

Avete bisogno di un URL, o semplicemente il percorso del documento? –

risposta

37

È possibile ottenere il percorso del documento tramite il NSSearchPathForDirectoriesInDomainsfoundation function come segue:

NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentPath = [searchPaths objectAtIndex:0]; 

Questo funziona su iOS 2+.

+0

@Andreas Nessun problema. Spero vada tutto bene. :-) –

+8

Come si può ottenere questo come un NSURL invece di una stringa? – zakdances

+8

per passare da documentsPath a NSURL: '[NSURL fileURLWithPath: urlString];' assicurarsi che la stringa termini in un '/' se l'url specifica una directory. – wbarksdale

42

Una soluzione alternativa potrebbe essere quella di utilizzare il metodo -[NSFileManager URLsForDirectory:inDomains:] e recupero il percorso dal NSArray restituito:

Objective-C:

NSArray *paths = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]; 
NSURL *documentsURL = [paths lastObject]; 

Swift:

let paths = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask) 
let documentsURL = paths[0] as! NSURL 

Questo è supportato in iOS 4.0+

+0

Perché stai accedendo a 'lastObject' in ObjC e' [0] 'aka' firstObject' in Swift? Basta chiedere di interesse ... –

+0

'paths.first' restituirà un optional. Per semplicità, qui viene utilizzato l'accessor subscript, quindi non dobbiamo occuparci di type case e unwrapping opzionale. –

+0

'- [NSArray firstObject]' e '- [NSArray lastObject]' sono definiti in modo identico. L'implementazione non dice nulla su una differenza. Puoi fornire più background? –

6

Ecco la versione di Swift 2.2 :

let paths = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask) 
let filePath = paths[0].URLByAppendingPathComponent("filename") 
13

Swift 3

let documentsUrl = FileManager.default.urls(for: .documentDirectory, in:.userDomainMask).first! 
Problemi correlati