2009-09-13 3 views
6

Эй, ребята У меня возникли проблемы с NSUserDefaults, и я не совсем понимаю, что происходитNSUserDefaults не экономя правильно

My App имеет 5 уровней, и каждый уровень делает ту же самую вещь с NSUserDefaults (Извлекает уровней по умолчанию , изменяет значение, когда пользователь воспроизводит уровень, а затем устанавливает значения по умолчанию и синхронизирует в конце уровня) первые 4 уровня ... работают без заминки, но последний уровень не сохраняет значения. Приложение не разбивается, и последний уровень не является последним, что случается, и у меня даже есть синхронизация по умолчанию, когда приложение завершается. Есть ли максимальный размер на NSUserDefaults или что-нибудь кто-нибудь может подумать о том, что я не, я выложу код ниже, но, как я сказал, что первые четыре уровня работают отлично

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

Когда при переключении для представления, которое использует эти значения по умолчанию, они правильны, но когда я завершаю приложение и перезапускаю его, эти значения не сохраняются, каждый другой уровень выполняет тот же самый процесс, это единственный уровень, который не работает.

Я довольно долго смотрел на это, и я надеюсь, что кто-то там столкнулся с той же проблемой и может дать мне некоторое представление о том, как они это разрешили.

Спасибо заранее BWC

+0

Трудно сказать, что вы опубликовали. Дважды проверьте метод, который сохраняет значения по умолчанию после уровня. – Jordan

ответ

13

NSUserDefaults может не иметь возможности сохранить в зависимости от того, как процесс завершается.

Этот ответ имеет больше информации: Why is NSUserDefaults not saving my values?

2

Где-то у вас есть что-то вроде:

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

Если начальные значения по умолчанию, которые вы настраиваете не имеют LevelFive значения по умолчанию, то вызовы будут терпеть неудачу.

Проверьте правильность возвращаемого значения из -synchronize для ошибок.

0

Я решил оставить эту проблему в стороне и продолжить разработку, которая включала добавление вещей после уровня пять, чтобы пользователь мог пройти через уровни и вернуться в главное меню и так далее и т. Д. ... и я не уверен, почему но userDefaults теперь сохраняются для пятого уровня, поэтому я не знаю, было ли это потому, что до того, как пятый уровень был последним, что было сделано приложением, и даже несмотря на то, что оно не прекратило себя и не делало другие вещи, возможно, это не было написано по умолчанию на диске ... Я все еще не уверен, что было не так, но сейчас он работает, и я не могу заставить его не видеть, могу ли я получить ошибку с синхронизацией ...

Спасибо за помощь

4

Только в случае, если кто-то бежит accross это: При сохранении NSDictionary или NSArray (или изменяемые Объекты оба) в значения по умолчанию пользователя, и они имеют NSURL Объект сохранен, он не будет сохранять данные на синхронизацию!

+0

Насколько это надоедает ?! –