2011-11-03 10 views
8

Devo aprire un NSSavePanel con la cartella Libreria utenti come cartella di destinazione. Normalmente lo farei inserendo ~/Library/ in [NSSavePanel beginSheetForDirectory].Come raggiungere gli utenti Cartella Libreria in OS X

Questo funziona correttamente finché l'applicazione non è in modalità sandbox. Per le applicazioni in modalità sandbox, ciò comporterà lo NSSavePanel che tenta di accedere a una cartella all'interno del "documento" del documento delle applicazioni.

Non posso riferire a /Users/username/Library/ poiché non conosco gli utenti username in fase di esecuzione. Quindi, come faccio a collegarmi a questo percorso nel cacao?

+0

Se tutto quello che vogliamo fare è trovare la directory home dell'utente visualizza https://stackoverflow.com/questions/6958448/can-i-get-the-current-users-home-directory-in-a-cocoa-objective-c-application – sashoalm

risposta

2

Non so se questo funzionerà su un'applicazione in modalità sandbox ma questo è come lo faccio adesso. Ciò restituirà/utente/TheirUserName

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

Funziona come un fascino! –

+1

'NSHomeDirectory()' restituisce il percorso in-sandbox, almeno su 10.7.4 Tuttavia, mentre questo è il metodo corretto per ottenere una cartella HOME, questo è il modo improprio di recuperare la cartella LIBRARY. Cosa succede se il percorso cambia? Si prega di utilizzare la soluzione JWWalker di 'NSSearchPathForDirectoriesInDomains()'. Iterate su tutti gli elementi restituiti quando possibile. –

0

Dipende da ciò che stai cercando di ottenere.

  • Se il comportamento è richiesto dall'applicazione, è possibile richiedere uno temporary exception entitlement quando si invia l'applicazione al Mac App Store. Ma prima o poi, dovrai trovare una soluzione per rimuovere questa eccezione.
  • Se si desidera accedere ai dati precedentemente memorizzati nella cartella ~/Library/, è possibile definire uno migration strategy per ripristinare i dati nella sandbox.
+0

Non ho bisogno di alcun diritti elevati per ottenere questo. Basta leggere/scrivere sul file system, poiché utilizzo una finestra di salvataggio per effettuare il salvataggio effettivo. Ho eseguito una dimostrazione di concetto su questo e so che funziona. Quello che devo fare all'utente è salvare alcuni file in questa cartella. Questo è il motivo per cui ho bisogno della cartella attuale e non solo dell'accesso al suo contenuto. Quindi non è bene portare i dati nella mia sandbox. Quindi ho bisogno di un qualche tipo di modo per leggere il "nome utente" degli utenti per essere in grado di costruire il percorso della sua cartella Libreria, come: "~/utente/[nome utente]/Libreria/ –

12

io non sono sicuro di come sandboxing in sintonia con questo, ma è possibile trovare directory libreria dell'utente utilizzando:

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