Domanda

Hey ragazzi sto avendo problemi con NSUserDefaults e non capisco bene cosa stia succedendo

La mia app ha 5 livelli e ogni livello fa esattamente la stessa cosa con NSUserDefaults (Recupera i livelli predefiniti dei livelli, cambia il valore mentre l'utente gioca il livello e quindi imposta i valori predefiniti e sincronizza alla fine del livello) i primi 4 livelli ... funzionano senza intoppi ma l'ultimo livello non salva i valori. L'app non si arresta in modo anomalo e l'ultimo livello non è l'ultima cosa che accade, e ho anche le impostazioni predefinite sincronizzate al termine dell'applicazione. C'è una dimensione massima su NSUserDefaults o c'è qualcosa a cui qualcuno può pensare che io non abbia, pubblicherò il codice qui sotto ma, come ho detto, i primi quattro livelli funzionano perfettamente

//header
NSUserDefaults *userData;


@property(nonatomic,retain) NSUserDefaults *userData;


//class file
//Sets the boolean variables for the class to use
userData = [NSUserDefaults standardUserDefaults];
boolOne = [userData boolForKey:@"LevelFiveBoolOne"];
boolTwo = [userData boolForKey:@"LevelFiveBoolTwo"];
boolThree = [userData boolForKey:@"LevelFiveBoolThree"];
boolFour = [userData boolForKey:@"LevelFiveBoolFour"];
boolFive = [userData boolForKey:@"LevelFiveBoolFive"];
boolSix = [userData boolForKey:@"LevelFiveBoolSix"];
boolSeven = [userData boolForKey:@"LevelFiveBoolSeven"];

//End Of Level
[userData setBool:boolOne forKey:@"LevelFiveBoolOne"];
[userData setBool:boolTwo forKey:@"LevelFiveBoolTwo"];
[userData setBool:boolThree forKey:@"LevelFiveBoolThree"];
[userData setBool:boolFour forKey:@"LevelFiveBoolFour"];
[userData setBool:boolFive forKey:@"LevelFiveBoolFive"];
[userData setBool:boolSix forKey:@"LevelFiveBoolSix"];
[userData setBool:boolSeven forKey:@"LevelFiveBoolSeven"];
[userData synchronize];

Quando quando passo alla vista che utilizza questi valori predefiniti, i loro valori sono corretti ma quando chiudo l'applicazione e la riavvio, questi valori non vengono salvati, ogni altro livello esegue esattamente lo stesso processo, questo è l'unico livello che non non funziona.

L'ho fissato per un bel po 'e spero che qualcuno là fuori abbia riscontrato lo stesso problema e possa darmi un'idea di come lo hanno risolto.

Grazie in anticipo BWC

È stato utile?

Soluzione

NSUserDefaults potrebbe non avere la possibilità di salvare a seconda di come è terminato il processo.

Questa risposta ha maggiori informazioni: Perché NSUserDefaults non salva i miei valori ?

Altri suggerimenti

Nel caso in cui qualcuno corre attraverso questo: quando si memorizza un NSDictionary o NSArray (o mutabile oggetti di entrambi) nell'utente per impostazione predefinita e hanno un NSURL oggetto memorizzato, non salverà i dati su synchonize!

Da qualche parte hai qualcosa come:

// load the default values for the user defaults
userDefaultsValuesPath=[[NSBundle mainBundle] pathForResource:@"UserDefaults" ofType:@"plist"];
userDefaultsValuesDict=[NSDictionary dictionaryWithContentsOfFile:userDefaultsValuesPath];

// set them in the standard user defaults
[[NSUserDefaults standardUserDefaults] registerDefaults:userDefaultsValuesDict];

Se le impostazioni predefinite iniziali che si stanno configurando non hanno le impostazioni predefinite LevelFive, le chiamate falliranno.

Controlla il valore restituito da -synchronize per errori.

Ho deciso di mettere da parte questo problema e continuare lo sviluppo che includeva l'aggiunta di elementi dopo il livello cinque in modo che l'utente potesse passare da un livello all'altro e tornare al menu principale e così via ... e non so perché ma userDefaults sta salvando per il livello cinque ora, quindi non so se è perché prima del livello cinque era l'ultima cosa che l'applicazione ha fatto e anche se non si è chiusa da sola e ha fatto altre cose forse non stava scrivendo le impostazioni predefinite su disco ... Non sono ancora sicuro di cosa sia andato storto, ma ora funziona e non riesco a vedere se riesco a ottenere un errore con la sincronizzazione ...

Grazie per l'aiuto

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