2013-08-06 17 views
12

Sto solo cercando di salvare/ripristinare un paio di volte. Quello che sto vedendo è che funziona mentre è collegato al debugger, ma dopo 15 minuti di chiusura dell'app - rilancia l'app e ripristina "-180" per entrambi i doppi.NSUserDefaults - Xamarin

Questo sembra giusto? O pensi che io stia salvando "-180" in qualche modo?

Questo è con il dispositivo non simulatore. sto usando Map.DidUpdateUserLocation che dà MKUserLocationEventArgs.

In qualche modo dà -180, -180 per la posizione. Possibile bug di Xamarin?

+0

Dove stai chiamando il metodo 'SaveLastLocation()'? – casillas

risposta

1

-180 sembra decisamente sospetto poiché non è 0 o MAX doppio e apparentemente correlato alle coordinate. Forse stai afferrando la posizione dell'utente prima che il responsabile della localizzazione abbia il tempo di individuarli. Potresti controllare che la lettura del gestore della posizione non superi i ~ 15 secondi. In genere ti dà l'ultimo blocco posizione mentre sta ottenendo l'ultima. -180 potrebbe essere ciò che il simulatore ti fornisce come "ultima posizione nota".

Non conosco il Monotouch ma sembra che tu stia chiamando i metodi corretti.

+0

Questo è però con il dispositivo non simulatore. sto usando Map.DidUpdateUserLocation che fornisce MKUserLocationEventArgs. In qualche modo dà -180, -180 per la posizione. Bug di Xamarin? – Quincy

4

Questa domanda è abbastanza vecchio, ma è saltato a me per una ragione, che abbiamo visto molto strano comportamento memorizzazione NSUserDefaults.StandardUserdefaults in una variabile locale e poi ripetutamente accedervi.

Qualcosa nel binding Xamarin.iOS (almeno per il MonoTouch, cioè API non unificata) è piuttosto rotto lì, probabilmente un problema di GC in cui l'oggetto perde il suo peer nativo. Noi abbiamo questo nel nostro codebase:

// it appears that capturing an instance of NSUserDefaults.StandardUserdefaults in a variable does not work in every case 
    // we have observed a voodoo bug when reading a written value from such an instance would fail (as I said, voodoo!) 
    // thus, we directly access standard user defaults here always via the lambda 
+0

Ha interessante, non posso confermare se questa è la correzione più. Ho lasciato il progetto parallelo su cui stavo lavorando. Se qualcuno potrebbe confermare, segnerò come risposta – Quincy

0

scopro che l'applicazione Id simulatore sarà cambiato dopo rilanciare da Studio Xamarin. Probabilmente interromperà l'archiviazione di NSUserDefaults, per controllarlo è possibile riavviare l'applicazione toccando l'icona dell'app sul simulatore.

+0

Lo fa anche sul dispositivo? – Quincy

+0

non si è sicuri, è possibile controllarlo, percorso delle risorse delle applicazioni in runtime, contenere l'ID dell'applicazione e sarà diverso ad ogni avvio. – Igor

+0

Difficile da credere. Ciò interromperà quindi tutto lo storage e nessuno potrebbe eseguire il debug. Il mio problema è descritto sul dispositivo e non connesso al debugger. – Quincy

1

Forse si potrebbe usare il pacchetto NuGet per la gestione delle impostazioni (PCL) che si possono trovare su github here o installati tramite NuGet here

Ho usato questa libreria su molti progetti in passato, e non mi ha mai presenta con strani valori Si noti che se si usa fare vedere '-180' apparire di nuovo, significa che qualcosa, da qualche parte nel codice sta scrivendo quel valore.