2014-04-23 4 views
14

consideri un plist preferenza con un dict che contiene una matrice:Come si aggiungono valori a matrici o dadi nidificati usando il comando "default registra"?

Creiamo esso:

defaults write org.my.test '{aDict = {anArray =();};}' 

poi leggerlo di nuovo a vedere la struttura meglio:

$defaults read org.my.test 
{ 
    aDict = { 
     anArray = (
     ); 
    }; 
} 

Ora, come si fa Aggiungere un valore a anArray utilizzando il comando defaults write?

So che esiste il tipo -array-add per l'aggiunta di valori a un array, ma come si specifica il percorso chiave per l'elemento dell'array?

Ho provato questo, ma che non funziona:

defaults write org.my.test aDict.anArray -array-add "a value" 

In realtà, ho bisogno di aggiungere un tipo non stringa, quindi ho anche bisogno di essere in grado di specificare il tipo, ad esempio, -bool YES.

(Nota: Non posso usare PlistBuddyplutil come questo ha bisogno di influenzare le preferenze vivi)

risposta

2

Uso plutil e la vostra vita sarà migliore. I valori predefiniti non supportano i percorsi chiave.

> defaults write org.my.test '{aDict = {anArray =();};}' 

> defaults read org.my.test 
{ 
    aDict =  { 
     anArray =   (
     ); 
    }; 
} 

> plutil -insert aDict.anArray.0 -bool YES ~/Library/Preferences/org.my.test.plist 

> defaults read org.my.test 
{ 
    aDict =  { 
     anArray =   (
      1 
     ); 
    }; 
} 

ho usato defaults read solo per dimostrare che gli ingressi attesi sono gli stessi, ma probabilmente utilizzare plutil -p ~/Library/Preferences/org.my.test.plist per leggere il file, invece, se si avvia usando più plutil.

+0

Il problema con questa soluzione è che non funzionerà con i file delle preferenze, perché quelli sono memorizzati nella cache dal 10,8 circa, quindi la modifica dei file sul disco non aggiornerà la cache di conseguenza. E ho bisogno di farlo con le preferenze ("User Defaults"). –

Problemi correlati