¿Cuál es la mejor manera de encontrar el directorio de documentos del usuario en un iPhone?

Estoy leyendo el Recetario de desarrollador de iPhone de Erica Sadun y me encontré con una pregunta.

Ella dice en el libro que la forma de encontrar el directorio de documentos del usuario es con el código:

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

pero eso parece un poco frágil, y no se parece a la manera normal de Mac de hacerlo, que sería:

 NSSearchPathForDirectoriesInDomains(NSDocumentsDirectory, NSUserDomainMask, YES); 

¿Hay alguna razón particular para usar una sobre la otra?

Objc:

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

Rápido:

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

Querrá el primer elemento de la matriz devuelta.

Aquí está el código que uso en mi marco.

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

Debería considerar usar los métodos NSFileManager que devuelven las URL, que son el formato preferido.

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

Este método está destinado a ubicar directorios conocidos y comunes en el sistema.

Una matriz de objetos NSURL que identifica los directorios solicitados. Los directorios se ordenan de acuerdo con el orden de las constantes de máscara de dominio, con elementos en el dominio de usuario primero y elementos en el dominio del sistema al final.

yo uso esto

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

En swift v3, utilicé el siguiente fragmento

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