NSFileManager – URLsForDirectory … o URLForDirectory

-[NSFileManager URLForDirectory:inDomain:appropriateForURL:create:error:] requiere una única NSSearchPathDomainMask y devuelve una única URL. (The ...appropriateForURL:create:error: parte es un poco confusa en la documentation).

-[NSFileManager URLsForDirectory:inDomains:] permite crear una máscara de bits para el parámetro de dominios y devuelve una matriz de URL.

Me parece que hay superposition entre estos dos methods. Si mi objective es get los documentos, o biblioteca, o el directory etc de un sandbox de la aplicación iOS, ¿cuándo debo usar uno sobre el otro?

La forma estándar de get acceso al directory de Documentos (u otros directorys similares) es un código como el siguiente:

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

Esto es similar a hacer:

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

La diferencia key es que el primero le da la ruta como un NSString mientras que el segundo le da la ruta como un NSURL .

El otro método se puede usar haciendo:

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

Puede pasar NO para el directory de documentos porque siempre existe. Debe pasar YES para el directory de soporte de la aplicación ya que no existe de forma pnetworkingeterminada. E idealmente, no debe pasar en nil el error para que pueda ver lo que sucedió si la llamada de método devuelve nil .

Cualquiera de estos tres enfoques funciona. Use la primera si desea la ruta como una cadena. Use el tercero si lo desea como URL. Use el segundo si tiene la rara necesidad de pasar en más de un dominio.