Domanda

Considero che l'utente apporti modifiche alle loro impostazioni nell'area Impostazioni dell'iPhone.Durante la prossima sincronizzazione della rete vorrei inviare le modifiche dell'utente al server.Ma solo se i cambiamenti sono fatti.

Ma come faccio a sapere quando l'utente ha effettuato una modifica all'interno dell'area Impostazioni?

Se posso, vorrei evitare un'opzione di inviare sempre le informazioni indipendentemente se modificata o meno o ottenere le informazioni dal server prima e l'aggiornamento se diverso dall'utente di valori predefiniti.

C'è un modo bello ed elegante per risolvere questo problema? Grazie per il tuo aiuto!

A Settimana dopo e nessuna risposta ... Questa domanda è troppo dura o non ha alcun senso?

È stato utile?

Soluzione

Ah sciocco me!Qui andiamo con un modo elegante.Cerca AppPrefs nella documentazione Apple all'interno di Xcode e mostrerà un'app di esempio che fa esattamente cosa vuoi fare.Basta compilazione e correre!Fa uso del NSUSERDEFAULTDIDCHANGENOTIFICAZIONE .

Questo è il codice utilizzato per registrare un osservatore:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(defaultsChanged:)
                                             name:NSUserDefaultsDidChangeNotification
                                           object:nil];
.


.

Vecchia risposta:

Non sembra come se potessi ottenere una data di modifica degli NSUSERDeFaults.Finora posso solo pensare a questo modo:

NSUserDefaults *previousDefaults = [someInstance previousUserDefaults];
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];

if([previousDefaults isEqualToDictionary:currentDefaults]) 
{
    [someOtherInstance sendModifiedUserDefaultsToServerWithDefaults:currentDefaults];
    [yetAnotherInstance saveModified]
}
.

Devi salvare l'utente default come dizionario su disco quando l'app viene avviata la prima volta: i valori predefiniti.Quindi, ogni volta che l'app viene aperta, confronta i due dizionari.Se loro

Altri suggerimenti

Non è che la domanda sia troppo dura, è solo che non c'è un modo semplice per fare ciò che stai chiedendo.NSUSERDeFaults non registra una data "Ultima modifica" per le impostazioni di ciascun app, almeno per quanto posso dire, quindi se l'utente cambia alcune impostazioni utilizzando l'app Impostazioni, non c'è un buon modo per rilevare l'altro che guardareTutte le impostazioni.

Se hai davvero bisogno di farlo, penso che la tua migliore scommessa sia leggere le impostazioni che ti interessano la sincronizzazione in alcune strutture di dati e calcolando una sorta di hash o checksum in base a quella struttura.Confronta tale valore sul valore che hai calcolato l'ultima volta che l'app correva e si sincronizza con il server se è diverso.È possibile memorizzare quel valore in NSUSERDeFaults se lo desideri, ma assicurati di non averlo inserito nel calcolo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top