2009-09-13 5 views
6

Hey Guys Je rencontre des problèmes avec NSUserDefaults et je ne comprends pas tout à fait ce qui se passeNSUserDefaults n'épargnent pas correctement

My App a 5 niveaux et chaque niveau fait la même chose avec NSUserDefaults (Récupère les valeurs par défaut des niveaux , change la valeur quand l'utilisateur joue le niveau puis règle les valeurs par défaut et se synchronise à la fin du niveau) les 4 premiers niveaux ... fonctionnent sans accroc mais le dernier niveau n'enregistre pas les valeurs. L'application ne plante pas et le dernier niveau n'est pas la dernière chose qui arrive, et j'ai même les paramètres par défaut synchronisés lorsque l'application se termine. Y at-il une taille maximale sur les NSUserDefaults ou est-il quelqu'un peut penser à quoi que ce soit que je ne l'ai pas, je vais poster le code ci-dessous, mais comme je l'ai dit les quatre premiers niveaux fonctionnent parfaitement

//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]; 

Quand quand je passe à la vue qui utilise ces valeurs par défaut, les valeurs sont correctes mais quand je termine l'application et la relance, ces valeurs ne sont pas sauvegardées, tous les autres niveaux font exactement le même processus c'est le seul niveau qui ne fonctionne pas. J'ai regardé fixement cela pendant un certain temps et j'espère que quelqu'un a couru dans le même problème et peut me donner un aperçu de la façon dont ils l'ont résolu.

Nous vous remercions à l'avance BWC

+0

Difficile à dire d'après ce que vous avez posté. Vérifiez la méthode qui enregistre les valeurs par défaut après le niveau. – Jordan

Répondre

2

Quelque part vous avez quelque chose comme:

// 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]; 

Si les réglages par défaut que vous configurez ne sont pas par défaut LevelFive, alors les appels échoueraient.

Vérifiez la valeur de retour de -synchronize pour les erreurs.

0

J'ai décidé de mettre de côté ce problème et de continuer le développement qui consistait à ajouter des choses après le niveau cinq pour que l'utilisateur puisse passer au niveau supérieur et retourner au menu principal et ainsi de suite ... et je ne sais pas pourquoi mais les userDefaults enregistrent maintenant pour le niveau cinq, donc je ne sais pas si c'est parce que le niveau cinq était la dernière chose que faisait l'application et même si elle ne se terminait pas et faisait d'autres choses, elle n'écrivait pas par défaut sur le disque ... Je ne suis toujours pas sûr de ce qui n'allait pas mais ça marche maintenant et je n'arrive pas à voir si je peux avoir une erreur avec la synchronisation ...

Merci pour l'aide

4

Juste au cas où quelqu'un court accross ceci: Lorsque vous enregistrez un NSDictionary ou NSArray (ou mutables objets de deux) dans les paramètres utilisateur par défaut et ils avoir un NSURL Objet stocké, il ne sera pas enregistrer les données sur synchonize!

+0

Comment ennuyeux est-ce?! –

Questions connexes