1

NSMutableDictionaryをNSUserDefaultsに保存する必要があります。私は多くの例をウェブで検索しましたが、十分に関連性のあるものを受け取っていません。誰かがシャットダウン時にNSUserDefaultsにNSMutableDictionaryを保存し、アプリの起動時にそれを取得する小さなコードを投稿できますか?また、コードの配置場所を教えてください。

私は自分でいくつかのコードを持っていますが、それは機能していません。

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つ必要になります。

4

1 に答える 1

5

applicationWillTerminateの説明:

バックグラウンド実行をサポートしていないアプリケーション、またはiOS 3.x以前に対してリンクされているアプリケーションの場合、このメソッドは、ユーザーがアプリケーションを終了したときに常に呼び出されます。バックグラウンド実行をサポートするアプリケーションの場合、アプリケーションがバックグラウンドに移動するだけなので、ユーザーがアプリケーションを終了するときにこのメソッドは通常呼び出されません。ただし、このメソッドは、アプリケーションがバックグラウンドで実行されており(一時停止されていない)、システムが何らかの理由でアプリケーションを終了する必要がある場合に呼び出されることがあります。

オブジェクトを保存するには、コードをapplicationDidEnterBackground:にも配置する必要があります。

iOS 4.0以降では、ユーザーがバックグラウンド実行をサポートするアプリケーションを終了すると、applicationWillTerminate:メソッドの代わりにこのメソッドが呼び出されます。この方法を使用して、共有リソースを解放し、ユーザーデータを保存し、タイマーを無効にし、アプリケーションが後で終了した場合に備えて、アプリケーションを現在の状態に復元するのに十分なアプリケーション状態情報を保存する必要があります。また、アプリケーションのユーザーインターフェイスの更新を無効にし、一部の種類の共有システムリソース(ユーザーの連絡先データベースなど)の使用を避ける必要があります。また、バックグラウンドでOpenGLESを使用しないようにすることも不可欠です。


配列の代わりに辞書を保存するには、配列のすべての出現箇所を辞書に置き換えるだけです。


そして、リークを修正します

tmpArray  = [[NSMutableArray alloc] init]; // not used, not released but `alloc`ed.
tmpArray = [NSKeyedUnarchiver unarchiveObjectWithData:dat];

最初の行を削除します。

于 2011-03-26T07:55:05.537 に答える