2016-06-15 29 views
17

Provo a scrivere/leggere valori a/da [NSUserDefaults standardUserDefaults], ma sembra non funzionare. Il mio codice è:iOS 10, NSUserDefaults non funziona

[[NSUserDefaults standardUserDefaults] setObject:@"sampleString" forKey:@"sampleKey"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 
NSString *defaultsValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"sampleKey"]; 
return defaultsValue; 

Questo codice restituisce nil, per Xcode 8.0 beta e iPhone 6S (10.0) simulatore. Tuttavia restituisce sampleString per Xcode 8.0 beta e simulatore iPhone 6s (9.1)

Sto testando la mia app con i nuovi sistemi. Sto facendo qualcosa di sbagliato? O c'è una soluzione per questo? O è solo un problema "beta"?

+0

Questo mi sembra giusto. Controllare la documentazione per NSUserDefaults e vedere se somethign è una novità per iOS 10 –

+1

Qual è il senso profondo (pratico) di leggere un valore subito dopo averlo scritto? – vadian

+1

@vadian questo non è il mio vero codice. Fondamentalmente scrivo al primo avvio dell'app e leggo al secondo.Il codice di esempio è solo un test dopo che ho capito che non funziona. – antonio

risposta

24

Ho appena avuto lo stesso problema. Sembra che ci sia un problema con NSUserDefaults quando si esegue il simulatore iOS8 o 9 e poi il simulatore iOS10. Il riavvio del mac ha risolto il problema per me.

+2

Confermato. Chiudere e riaprire il simulatore non ha funzionato, ma il riavvio lo ha corretto per me. –

+0

Stesso problema, stessa soluzione, grazie – Medhi

+0

grazie mille Ho appena incontrato la stessa situazione – Akabrando

5

Questo è stato un bug con il simulatore iOS fornito con Xcode 8 Beta 1. E 'stato risolto in Beta 2:

risolto in Xcode 8 beta 2 - IDE

Simulator

  • NSUserDefaults funziona correttamente in iOS 10 Simulator, indipendentemente dal fatto che sia stato avviato in precedenza il simulatore iOS 8 o iOS 9 . (25974372)

Xcode 8 Beta 2 Release Notes

Update per Xcode 8 Beta 2 per evitare di dover riavviare il Mac ospite ogni volta.

1

Ho appena avuto lo stesso problema. Sembra che ci sia un problema con NSUserDefaults quando si esegue il simulatore iOS8 o 9 e poi il simulatore iOS10. Il riavvio del mac ha risolto il problema per me. shareeditflag Confermato. Chiudere e riaprire il simulatore non ha funzionato, ma il riavvio lo ha corretto per me.

Come per Apple (apple link) WWDC Seed: l'esecuzione di più simulatori iOS può causare il mancato funzionamento di NSUserDefaults L'esecuzione di un simulatore iOS 8 o 9 seguito da un simulatore iOS 10 causerà l'arresto di NSUserDefaults nel simulatore. Questo può essere risolto riavviando il Mac host.

2

Aggiornamento:

Se la protezione dei dati è abilitata, synchronize possono anche fallire quando un'applicazione entrare sfondo.


Abbiamo questo problema in un vero e proprio dispositivo con iOS 10.1.1. È possibile leggere il vecchio valore, ma le nuove modifiche non possono essere salvate su disco, il metodo synchronize fallisce sempre.

Il riavvio del dispositivo può risolvere questo problema.

+0

Grazie! Spero che questo non sia il caso sul dispositivo dell'utente! –

+0

Grazie, sei di fronte a questo dispositivo reale. – Ricardo

+0

Ma ho disabilitato la protezione dei dati. – Ricardo

Problemi correlati