2011-11-03 9 views
8

Necesito abrir un NSSavePanel con la carpeta de la biblioteca de los usuarios como carpeta de destino. Normalmente haria esto ingresando ~/Library/ en [NSSavePanel beginSheetForDirectory].Obtención de la ruta a los usuarios Carpeta de la biblioteca en OS X

Esto funciona bien siempre y cuando la aplicación no sea un espacio aislado. Para aplicaciones de espacio aislado, esto dará como resultado el NSSavePanel tratando de acceder a una carpeta dentro del "cuadro" del documento de aplicaciones.

No puedo referirme a /Users/username/Library/ ya que no conozco a los usuarios username en tiempo de ejecución. Entonces, ¿cómo puedo vincular este camino en el cacao?

+0

Si todo lo que quiere hacer es encontrar el directorio de inicio del usuario vea https://stackoverflow.com/questions/6958448/can-i-get-the-current-users-home-directory-in-a-cocoa-objective-c-application – sashoalm

Respuesta

2

No estoy seguro si esto funcionará en una aplicación de espacio aislado, pero así es como lo hago ahora mismo. Esto devolverá/usuario/TheirUserName

-(NSString *)homeDirectory 
{ 
    return NSHomeDirectory(); 
} 
+0

¡Funciona como un amuleto! ¡Necesito, gracias! –

+1

'NSHomeDirectory()' devuelve la ruta de la zona de pruebas, al menos en 10.7.4. Sin embargo, aunque este es el método adecuado para obtener una carpeta HOME, esta es la forma incorrecta de recuperar la carpeta LIBRARY. ¿Qué sucede si la ruta cambia? Utilice la solución de JWWalker de 'NSSearchPathForDirectoriesInDomains()'. Itere todos los elementos devueltos siempre que sea posible. –

0

Depende de lo que esté tratando de lograr.

  • Si su aplicación requiere el comportamiento, puede solicitar un temporary exception entitlement al enviar la aplicación al Mac App Store. Pero tarde o temprano, tendrá que encontrar una solución para eliminar esta excepción.
  • Si desea acceder a los datos que estaban almacenados previamente en la carpeta ~/Library/, puede definir migration strategy para regresar los datos al recinto de seguridad.
+0

No necesito ninguna derechos elevados para lograr esto. Es suficiente con leer/escribir en el sistema de archivos, ya que utilizo un diálogo de guardar para hacer el ahorro real. He presentado una prueba de concepto sobre esto y sé que funciona. Lo que necesito que haga el usuario es guardar algunos archivos en esta carpeta. Es por eso que necesito la carpeta real y no solo acceder a su contenido. Por lo tanto, tampoco es bueno incluir los datos en mi caja de arena. Así que necesito algún tipo de forma de leer el nombre de usuario de los usuarios para poder crear la ruta a su carpeta Library, como: "~/user/[username]/Library/ –

12

No estoy seguro de cómo recinto de seguridad encaja dentro de esta, pero se puede encontrar el directorio de la biblioteca del usuario usando:

NSArray* paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES); 
Cuestiones relacionadas