Question

Hé les gars, j'ai des problèmes avec NSUserDefaults et je ne comprends pas très bien ce qui se passe

Mon application comporte 5 niveaux et chaque niveau fait exactement la même chose avec NSUserDefaults (récupère les niveaux par défaut, modifie la valeur lorsque l'utilisateur lit le niveau, puis définit les paramètres 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 se produit, et j'ai même synchronisé les valeurs par défaut lorsque l'application se termine. Y a-t-il une taille maximale sur NSUserDefaults ou y a-t-il quelque chose que quiconque puisse penser que je ne l'ai pas déjà fait, je posterai 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];

Lorsque je passe dans la vue qui utilise ces valeurs par défaut, leurs valeurs sont correctes, mais lorsque je ferme l'application et que je la redémarre, ces valeurs ne sont pas enregistrées. Tous les autres niveaux effectuent exactement le même processus. C'est le seul niveau qui ne le soit pas. ne fonctionne pas.

Je regarde ça depuis un bon bout de temps et j'espère que quelqu'un rencontrera le même problème et pourra me donner une idée de la façon dont ils l'ont résolu.

Merci d'avance BWC

Était-ce utile?

La solution

Il est possible que NSUserDefaults n'ait pas la possibilité de sauvegarder en fonction de la fin du processus.

Cette réponse contient plus d'informations: Pourquoi NSUserDefaults n'enregistre-t-il pas mes valeurs ?

Autres conseils

Juste au cas où quelqu'un se heurterait à ceci: lors du stockage d'un NSDictionary ou NSArray (ou mutable d'objets des deux) dans l'utilisateur Par défaut et ils ont un NSURL objet stocké, les données ne seront pas enregistrées sur Synchonize!

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 valeurs par défaut initiales que vous configurez n'ont pas de valeurs par défaut pour LevelFive, les appels échoueraient.

Vérifiez si la valeur renvoyée par -synchronize est correcte.

J'ai décidé de mettre ce problème de côté et de poursuivre le développement, qui comprenait l'ajout d'éléments après le niveau cinq afin que l'utilisateur puisse parcourir les niveaux et revenir au menu principal, etc., etc., et je ne sais pas trop pourquoi, mais les utilisateurs par défaut économisent maintenant pour le niveau cinq, donc je ne sais pas si c'est parce qu'avant le niveau cinq était la toute dernière chose que l'application faisait et même si elle ne s'est pas arrêtée et a fait d'autres choses, peut-être que cela n'a pas été écrit. sur le disque ... Je ne sais toujours pas ce qui n'allait pas, mais cela fonctionne maintenant et je ne peux pas l'obtenir. Je ne peux pas voir si je peux obtenir une erreur lors de la synchronisation.

Merci pour l'aide

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top