Вопрос

Эй, ребята, у меня проблемы с 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

Это было полезно?

Решение

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

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

Другие советы

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

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

// 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 на наличие ошибок.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top