NSuserDefaultsでNSMutabledictionaryを保存する方法
質問
NSUSERDECAULTSでは、NSUSERDECTIONARYを保存する必要があります。私は多くの例でWebを検索しましたが、十分に関連するものを受け取っていません。誰かがSHUTDOWNでNSUSERDEFAULTSでNSMutabletictionaryを保存し、アプリの起動時にそれを取得するコードの小さなコードを投稿できますか?コードを配置する場所を教えてください。
私は自分自身をいくつか持っていますが、それは機能していません。
appdelegate.h - データの検索
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *dat = [defaults objectForKey:@"theKey"];
tmpArray = [[NSMutableArray alloc] init];
tmpArray = [NSKeyedUnarchiver unarchiveObjectWithData:dat];
[self.window makeKeyAndVisible];
[window addSubview:tabBarController.view];
return YES;
}
.
appdelegate.h - データの保存
- (void)applicationWillTerminate:(UIApplication *)application {
[self saveContext];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *dat = [NSKeyedArchiver archivedDataWithRootObject:tmpArray];
[defaults setObject:dat forKey:@"theKey"];
}
.
はい、それは配列のためのものですが、私はnsmutabledictionaryのために1つ必要です。
解決
バックグラウンド実行をサポートしていないアプリケーションまたはiOS 3.x以前に対してリンクされているアプリケーションは、ユーザーがアプリケーションを終了すると常に呼び出されます。 バックグラウンド実行をサポートするアプリケーションの場合、アプリケーションがその場合の背景に移動するだけでアプリケーションがアプリケーションを終了すると一般に呼び出されません。背景(中断されていない)で実行されており、システムは何らかの理由でそれを終了する必要があります。
オブジェクトを保存するためにコードを ApplicationDidenterBackground:
IOS 4.0以降では、このメソッドはApplicationWillTerminateの代わりに呼び出されます。ユーザーがバックグラウンド実行をサポートするアプリケーションを終了すると、方法です。このメソッドを使用して共有リソースを解放し、ユーザーデータを保存し、タイマーを無効にし、アプリケーションを復元するのに十分なアプリケーション状態情報を復元するには、アプリケーションのアップデートを無効にする必要があります。ユーザーインターフェイスと、いくつかの種類の共有システムリソース(ユーザーの連絡先データベースなど)を使用しないでください。バックグラウンドでOpenGL ESを使用しないでください。
配列の代わりに辞書を保存するには、配列のすべての出現箇所を辞書に置き換えるだけです。
漏れを固定する
.tmpArray = [[NSMutableArray alloc] init]; // not used, not released but `alloc`ed. tmpArray = [NSKeyedUnarchiver unarchiveObjectWithData:dat];
1行目を削除します。