質問

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つ必要です。

役に立ちましたか?

解決

ApplicationWillterminate:

バックグラウンド実行をサポートしていないアプリケーションまたは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行目を削除します。

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