2013-06-13 19 views
6

Ho il seguente strano comportamento nel mio Windows Phone 8, C# App.windows phone 8, le impostazioni delle applicazioni non persistono

Sto risparmiando un'impostazione con:

private void SaveProperty<T>(T property, string propertyName) 
    { 
     if (IsolatedStorageSettings.ApplicationSettings.Contains(propertyName)) 
      IsolatedStorageSettings.ApplicationSettings[propertyName] = property; 
     else 
      IsolatedStorageSettings.ApplicationSettings.Add(propertyName, property); 

     IsolatedStorageSettings.ApplicationSettings.Save(); 
    } 

Quando viene eseguito l'app, posso leggere tutte le impostazioni sono memorizzate in IsolatedStorageSettings.ApplicationSettings.

Ma quando riaprilo l'app (aprila dall'elenco delle app), il IsolatedStorageSettings.ApplicationSettings -Dictionary contiene Zero (0) Chiavi e valori.

Mi manca qualcosa?

Ho utilizzato ISETool.exe per scattare istantanee di IsolatedStorage della mia app (grazie a chepene). Ho visto questo comportamento: quando ho scritto le impostazioni (che significa che dopo la funzione SaveProperty<T>() terminata) e l'app è ancora in esecuzione, ho le impostazioni salvate in _ApplicationSettings. Questo è d'accordo con la mia osservazione che posso leggere dallo IsolatedStorageSettings.ApplicationSettings quando l'app è in esecuzione. Il file _ApplicationSettings -file esiste anche se è disattivato o non è in esecuzione (quando posso accedervi tenendo premuto il pulsante Indietro del telefono e quando l'app viene chiusa con il pulsante Indietro).

Ma quando l'applicazione viene aperta di nuovo (tramite la lista app), il -file _ApplicationSettings è andato ...

Vedo anche che, quando sto scrivendo un file nella IsolatedStorage con:

e quando quindi non leggo questo file, è andato quando apro l'app la prossima volta.

A proposito, per evitare confusione: Sono non reinstallare l'app ogni volta che lo apro.

Se avete bisogno di ulteriori informazioni si prega di chiedere.

Qualsiasi aiuto apprezzato.

+0

stai usando l'emulatore o un dispositivo? se si utilizza l'emulatore, si sta uscendo dall'applicazione interrompendo la sessione di debug di Visual Studio o il pulsante "Indietro" nell'emulatore? –

+0

Dopo il metodo 'Save()', cercare (con Isolated Storage Explorer) quali file esistono nella memoria isolata dell'app. – Chepene

+0

@Beytan Kurt: sto usando un dispositivo, ma ho anche controllato l'emulatore: stesso comportamento. Non sto uscendo direttamente dall'app, piuttosto che riaprirlo aprendolo dall'elenco delle app. –

risposta

0

Grazie a quetzalcoatl ho trovato la soluzione: Sto memorizzando tutti i miei file nella cartella principale della mia app. All'inizio sto leggendo tutti i miei file (tramite un DataContractSerializer) e lanciandolo sul mio modello. Poiché a volte capita che i miei file vengano corrotti, elimino ogni file che genera un SerialzationException. Ma mentre leggo tutti i file, e dal momento che _ApplicationSettings non è compatibile con il mio modello, sto eliminando automaticamente _ApplicationSettings .... Quindi ho appreso che le Impostazioni delle applicazioni sono, solo un file nella cartella principale, che ho il permesso di leggere e elimina. Quindi la quintessenza è di non scrivere mai nella cartella radice.

+0

Ottimo! Sono contento che tu l'abbia trovato e che non sia ancora un altro strano comportamento di WPhone :) Ricorda di contrassegnare la tua risposta come "accettata" (quella "V") in modo che tutti sappiano che è stata risolta. – quetzalcoatl

+0

Posso contrassegnare la propria risposta come "accettata" in 48h. Ma poi lo farò;) –

3

Con AppSettings, ho visto qualcosa di simile su WP7/7.5, ma è successo solo quando il tipo di valore della mia proprietà era una classe che non era nota al serializzatore.

Sei sicuro che non ci fossero eccezioni:

  • durante Salva
  • durante App Exit (in quanto l'App può eseguire il dump dei impostazioni a quel punto)
  • durante il tempo che App carica le impostazioni per la prima volta dopo il lancio?

Si noti che questo non deve necessariamente significare l'arresto anomalo dell'app. Voglio dire, qualsiasi eccezione, anche quelli internamente messi a tacere o gestiti dall'utente. Controllare il pannello Output di VisualStudio per il registro "eccezioni di prima scelta". Se viene visualizzata una qualsiasi eccezione di I/O o di sicurezza o di serializzazione, quindi effettuare delle ricerche. Se ricordo bene, c'è anche un intero set di eccezioni di storage isolato che sono facilmente intercettabili dal menu di debug/eccezioni.

Tuttavia, i problemi che ho riscontrato con tipi sconosciuti o non serializzabili non spiegano in alcun modo perché i file extra non per le app potranno evaporare.

Un'altra idea: forse qualche strumento aggiuntivo esegue qualcosa di simile a "deploy clean" per te? Non mi ricordo esattamente, ma credo che il ciclo di distribuzione VisualStudio era piuttosto semplice:

  • ricostruzione
  • rimuovere/disinstallare la vecchia app dalla dispositivo - in modo probabilmente purghe IsolatedStorage
  • installare nuova applicazione su dispositivo

Quindi, forse questa è la causa? Hm .. per ripensarci e rileggere di nuovo la tua domanda, hai detto di eseguire l'app dall'applist, quindi non è il caso. Assicurati di controllare le eccezioni di firstchance allora!

+0

Ho ottenuto un 'System.Runtime.Serialization.SerializationException' in' System.Runtime.Serialization.ni.dll'. Ma ora ho appena provato: 'IsolatedStorageSettings.ApplicationSettings.Add (" test "," testwert ");' Non ho fatto cose di fantasia. Basta aggiungere una semplice stringa. Questo non può essere troppo difficile per il serializzatore ... Quindi, cosa posso fare, ora che ho visto questa eccezione? Aspetta, mi sono dimenticato di dirti, che questa eccezione si verifica all'avvio dell'app. Non quando le impostazioni vengono salvate ... –

+1

Proviamo a intercettarlo e controllare cosa dice il messaggio. Arresta l'app, vai in VisualStudio, nel menu Debug, quindi "Eccezioni .." quindi nella struttura trova lo spazio dei nomi e l'eccezione e controlla "Quando lanciato". Ora prova ad avviare l'app tramite "Debug" una o due volte. Se l'eccezione si presenta, allora il debugger ha grandi possibilità di fermarsi immediatamente. Se succede, otterrai un tipico 'assistente delle eccezioni' e sarai in grado di leggere il messaggio, controllare lo stacktrace e così via. – quetzalcoatl

+0

Tuttavia, l'unico "Debug" potrebbe cancellare le vecchie impostazioni dell'app. Non lo ricordo, mi dispiace. Ma sono abbastanza sicuro di aver intercettato e investigato le mie SerializationExceptions in quel modo esatto (ma il mio stava accadendo su AppQuit, non su AppStart). – quetzalcoatl

Problemi correlati