NSUserDefaults неправильно сохраняются - PullRequest
6 голосов
/ 14 сентября 2009

Эй, ребята, у меня проблемы с NSUserDefaults, и я не совсем понимаю, что происходит

Мое приложение имеет 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

Ответы [ 4 ]

13 голосов
/ 13 апреля 2010

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

Этот ответ содержит больше информации: Почему NSUserDefaults не сохраняет мои значения?

4 голосов
/ 17 августа 2012

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

2 голосов
/ 14 сентября 2009

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

// 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 голосов
/ 14 сентября 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...