質問

Hey Guys NSUserDefaultsに問題があり、何が起こっているのかよくわかりません

私のアプリには5つのレベルがあり、各レベルはNSUserDefaultsでまったく同じことを行います(レベルのデフォルトを取得し、ユーザーがレベルを再生すると値を変更し、デフォルトを設定してレベルの終わりに同期します)最初の4レベル...支障なく動作しますが、最後のレベルは値を保存しません。アプリはクラッシュせず、最後のレベルは最後に発生するものではありません。また、アプリケーションの終了時にデフォルトの同期をとることさえできます。 NSUserDefaultsに最大サイズがあるか、誰も考えられないことはありますか、以下のコードを投稿しますが、最初の4つのレベルが完全に機能すると言ったように

//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 (または両方の mutable オブジェクト)を保存する場合デフォルトで、 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からの戻り値を確認します。

この問題を脇に置いて、レベル5の後に物を追加するなど、ユーザーがレベルをループしてメインメニューなどに戻ることができるように開発を続けることにしました... userDefaultsは現在レベル5で保存されているので、レベル5の前はアプリケーションが最後に実行したものであり、アプリケーション自体が終了せず、他のことを実行したにもかかわらず、実際にはデフォルトを書き込んでいないためかどうかはわかりませんディスクに...私はまだ何が間違っていたのかわかりませんが、今はうまく機能しており、同期でエラーが発生するかどうかを確認するのに失敗することはありません...

助けてくれてありがとう

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top