Salvataggio delle preferenze di Mac OS X, quando applicare / salvare le modifiche apportate dall'utente [chiuso]

-1

È tipico che le app di Mac OS X abbiano preferenze che si applicano senza problemi e le finestre di dialogo delle preferenze non hanno il pulsante "OK" o "Applica". Voglio implementare questo comportamento nel mio progetto, ma non riesco a decidere quando applicare / salvare le modifiche apportate dall'utente.

È abbastanza chiaro che le caselle di controllo e gli elenchi a discesa possono essere salvati immediatamente dopo il cambiamento, ma quando si tratta di campi di testo, questo approccio sembra discutibile. Ad esempio, inserendo "programming.stackexchange.com" come indirizzo host si attivano 29 scritture HDD, il che sembra sbagliato. Inoltre, nella mia semplice implementazione ciò causerà la riscrittura dell'intero file delle impostazioni.

Quindi esiste un modo standard per implementare le preferenze di tipo MacOS?

    
posta tonytony 29.12.2014 - 17:01
fonte

2 risposte

3

Un modo ragionevole per farlo è il seguente:

  • Per un tipo di input che ha una selezione discreta come una casella di controllo, un pulsante di opzione o un elenco: salva l'impostazione non appena l'utente effettua la selezione.
  • Per un tipo di input con selezione a mano libera come una casella di testo: salva l'impostazione non appena l'elemento di input perde lo stato attivo o la finestra di dialogo viene chiusa. Per caselle di testo più lunghe (ad esempio un elemento rich text che potrebbe contenere dati complessi e molte di esse) potrebbe avere senso salvare i dati ogni pochi secondi in aggiunta ai criteri precedenti. In realtà questo è lo stesso metodo utilizzato quando si scrivono domande e risposte qui su Stack Exchange.

È importante tenere presente che oltre a salvare in memoria persistente (ad es. il disco rigido), le preferenze di aggiornamento possono anche innescare eventi nell'applicazione che aggiornano l'interfaccia utente altrove nel programma. La gestione di questi eventi può anche consumare risorse come CPU e memoria. Pur non affrontando rigorosamente la tua domanda, è strettamente correlato e vale la pena di pensare mentre implementa una soluzione come questa.

    
risposta data 29.12.2014 - 23:43
fonte
2

Se utilizzi NSDefaults (o CFPreferences), puoi aggiornare immediatamente le impostazioni predefinite. Vengono passati al processo di background cfprefsd (abbreviazione di Core Foundation PREFerenceS Daemon) che li tiene in RAM e scrive su disco a suo piacimento. Uccidere la tua app non uccide cfprefsd , quindi le impostazioni non vanno perse.

(Killing cfprefsd , che in realtà ho visto suggerire alle persone come un modo per evitare di sovrascrivere un .plist che hanno appena modificato dietro la sua schiena, può provocare danni collaterali illimitati. n.)

    
risposta data 30.12.2014 - 07:18
fonte

Leggi altre domande sui tag