62 votes

Quelle est la meilleure façon de trouver le répertoire des documents de l'utilisateur sur un iPhone ?

Je lis le livre d'Erica Sadun. Livre de recettes pour les développeurs d'iPhone et je me suis heurté à une question.

Elle dit dans le livre que le moyen de trouver le répertoire des documents de l'utilisateur est le code :

[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];

mais cela semble un peu fragile, et ne ressemble pas à la façon normale de faire du Mac, qui serait :

NSSearchPathForDirectoriesInDomains(NSDocumentsDirectory, NSUserDomainMask, YES);

Y a-t-il des raisons particulières d'utiliser l'un plutôt que l'autre ?

0 votes

Une faute de frappe : NSDocumentsDirectory ==> NSDocumentDirectory

95voto

Ben Gottlieb Points 59900

Objc :

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)

Swift :

var paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)

Vous voulez le premier élément du tableau retourné.

1 votes

Cool, c'est ce que je vais utiliser, mais pourquoi ça et pas l'inverse ?

3 votes

Vous pouvez utiliser l'autre méthode, mais si une mise à jour du système d'exploitation modifie la structure par défaut, cette réponse est garantie pour continuer à fonctionner avec la nouvelle disposition, tandis que la première méthode échouera ou commencera à recréer les anciens répertoires.

50voto

Lee Points 623

Voici le code que j'utilise dans mon cadre.

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

2 votes

Depuis Xcode 5, vous devez utiliser [paths firstObject] au lieu de [paths objectAtIndex:0] .

3 votes

Ou "NSString *documentsDirectory = paths[0] ;".

3 votes

Ou paths.firstObject puisqu'il s'agit d'un property .

15voto

Nietzsche Points 146

Vous devriez envisager d'utiliser les méthodes NSFileManager qui renvoient des URL, qui sont le format préféré.

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

Cette méthode est destinée à localiser les répertoires connus et courants du système.

Un tableau d'objets NSURL identifiant les répertoires demandés. Les répertoires sont classés selon l'ordre des constantes de masque de domaine, les éléments du domaine utilisateur en premier et les éléments du domaine système en dernier.

2 votes

C'est exact. Nous devrions mettre à jour nos connaissances sur le fait que dans iOS nous devrions utiliser NSURL, plutôt que NSString (pour le chemin) pour représenter le fichier local.

1voto

J'utilise ceci

NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *zipLocalPath = [documentPath stringByAppendingString:fileName];

-1voto

Suresh Velusamy Points 1088

Dans swift v3, j'ai utilisé le snippet suivant

var paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X