6

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

これらのデフォルトを使用するビューに切り替えると、それらの値は正しいのですが、アプリケーションを終了して再起動すると、これらの値は保存されません。他のすべてのレベルはまったく同じプロセスを実行します。これは、機能しない唯一のレベルです。 。

私はかなり長い間これを見つめてきました、そして私はそこにいる誰かが同じ問題に遭遇し、彼らがそれをどのように解決したかについての洞察を私に与えることができることを望んでいます。

4

4 に答える 4

13

プロセスの終了方法によっては、NSUserDefaultsに保存できない場合があります。

この回答には詳細があります:NSUserDefaultsが値を保存しないのはなぜですか?

于 2010-04-13T05:10:45.503 に答える
4

誰かがこれに遭遇した場合に備えて:NSDictionaryまたはNSArray(または両方の可変オブジェクト)をユーザーのデフォルトに保存し、 NSURLオブジェクトが保存されている場合、同期時にデータは保存されません!

于 2012-08-17T07:39:09.820 に答える
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からの戻り値にエラーがないか確認してください。

于 2009-09-14T04:32:37.580 に答える
0

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

助けてくれてありがとう

于 2009-09-14T05:39:07.343 に答える