2012-03-15 14 views
0

私のNSUserDefaultsは、アプリケーションの実行中または最小化時に正常に動作します。しかし、私がアプリを終了して再起動した場合、返されるオブジェクトはnullです。コード:NSUserDefaultsは同期を使用しても保持されません

colorDefault = [NSUserDefaults standardUserDefaults]; 
[colorDefault setObject:myColor2 forKey:@"fieldKey"]; 
NSDictionary *appDefaults = [NSDictionary dictionaryWithObjectsAndKeys:myColor2, @"fieldKey", nil]; 

[[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults]; 
//[[NSUserDefaults standardUserDefaults] synchronize]; 

[colorDefault synchronize]; 

ノー成功を収めて、私のapplicationDidEnterBackgroundにし、applicationWillTerminate[[NSUserDefaults standardUserDefaults] synchronize]を呼び出します。私はNSLoggedこれらの方法と私はアプリを殺すと、私はDidEnterBackgroundが呼び出されていることに気付きました..

ありがとうございました!

+1

はnilのオブジェクトは、それが呼び出される場合を含む、返されるコードを表示します。また、あなたのアプリのどこに上記のコードがありますか? registerDefaults:どうしたらいいのですか? – jrturton

+2

myColor2変数タイプとは何ですか? registerDefaultsの動作の詳細については、https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.htmlを参照してください。 –

+0

どういうわけか、私はこの古いポストを見つけられませんでしたが、私は同じシナリオがあります:[here](http://stackoverflow.com/questions/6349648/nsuserdefaults-wont-save-permanantly) viewDidLoadとviewWillAppearのデフォルト(viewDidLoadはアプリが起動するたびに呼び出されるので、明示的にそこにいる必要があります) – Gravemind

答えて

0

Mmmm ...私はあなたのコードはよりシンプルであるべきだと思います。

これは私がNSUserDefaultを書くために、それを取得するために何をすべきかです:

// write 
[[NSUserDefaults standardUserDefaults] setObject:@"aString" forKey:@"aKey"]; 

// read 
[[NSUserDefaults standardUserDefaults] objectForKey:@"aKey"]; 

のsetObjectが唯一の選択肢ではありません:setBool、setFloat、setIntegerと反対側のboolForKeyに、floatForKey、integerForKeyにも優れています。

プロジェクトでSettings.bundleaKeyを設定することを忘れないでください:

<dict> 
<key>Key</key> 
<string>aKey</string> 
<key>DefaultValue</key> 
<false/> 
</dict> 

・ホープ、このことができます...

+0

申し訳ありません。あなたが言及したすべてのものは有効でしたが、それはこれで終わった: 'String == @" Blue "// の代わりに//文字列isEqualToString:@" Blue "' アプリを閉じる前にうまくいかない。しかしその後、それはそれを変更します。再度、感謝します! – Gravemind

+0

ああ...そうだ。文字列を比較するときは、常にisEqualToStringを使用します。==演算子は内容の代わりにオブジェクトアドレスを比較するようです。 (あなたは大歓迎です^^ ^) – Beppe

+0

ドキュメントを読むことをお勧めします。registerDefaults:setValueとは別のものです:forKey:http://developer.apple.com/library/mac/documentation/Cocoa/Reference/ Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html#// apple_ref/occ/instm/NSUserDefaults/registerDefaults: – Omer

関連する問題