2010-11-30 10 views
2

現在選択されているUITabBarのインデックスを[NSUserDefaults standardUserDefaults]に書き出していますが、インデックスがディスクに書き込まれていないという奇妙な状況が発生しています。私はsetObject:forKey:は、ディスクへの実際の書き込みをした場合、誰が教えてもらえますNSUserDefaultsはディスクに書き込みますか?

// TO WRITE 
NSNumber *selectedTab = [NSNumber numberWithInt:[tabBarController selectedIndex]]; 
[[NSUserDefaults standardUserDefaults] setObject:selectedTab forKey:@"selectedTab"]; 

と...

// TO READ 
NSNumber *selectTab = [[NSUserDefaults standardUserDefaults] objectForKey:@"selectedTab"]; 
NSLog(@"SelectTab: %@", selectTab); 
[tabController setSelectedIndex:[selectTab intValue]]; 

を使用していますか、私はsynchronizeのようなものを使用して書き込みを強制する必要がありますか?

+0

[環境設定setInteger:42 forKey: "integerKey" @]。 [prefs synchronize]; – Vjy

+0

リプレイした皆さん、ありがとうございました。 – fuzzygoat

答えて

5

synchronizeに電話する必要がありますが、定期的に(少なくともドキュメントに従って)自動的に呼び出されます。それを呼び出す良い時間は、アプリケーションデリゲートのapplicationWillEnterBackground:applicationWillTerminate:です。

3

はい。同期を呼び出して、変更が実際に書き込まれていることを確認する必要があります。

[[NSUserDefaults standardUserDefaults] synchronize]; 

通常は、applicationWillResignActiveハンドラで行われます。

2

synchronizeメソッドは定期的に自動的に呼び出されます。定期的な間隔を待つことができない場合は、直接呼び出すこともできます。 Appleのドキュメントでは、アプリケーションが終了しようとしている場合にsynchronizeを呼び出す例を示しています。

参照:NSUserDefaults Class Reference

関連する問題