如何在NSUserDefaults中保存NSMutableDictionary

Ara*_*ind 1 iphone application-shutdown nsuserdefaults nsmutabledictionary data-persistence

我需要在NSUserDefaults中保存NSMutableDictionary.我在网上搜索了很多例子,但没有收到任何足够相关的例子.有人可以发布一小段代码,它会在关机时在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;
}
Run Code Online (Sandbox Code Playgroud)

appDelegate.h - 存储数据

- (void)applicationWillTerminate:(UIApplication *)application {

      [self saveContext];
      NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
      NSData *dat = [NSKeyedArchiver archivedDataWithRootObject:tmpArray];
      [defaults setObject:dat forKey:@"theKey"];
}
Run Code Online (Sandbox Code Playgroud)

是的,它是一个数组,但我需要一个NSMutableDictionary.

Mat*_*uch 5

applicationWillTerminate的讨论:

对于不支持后台执行或链接到iOS 3.x或更早版本的应用程序,当用户退出应用程序时,始终会调用此方法.对于支持后台执行的应用程序,当用户退出应用程序时通常不会调用此方法,因为在这种情况下应用程序只是移动到后台.但是,可以在应用程序在后台运行(未挂起)并且系统由于某种原因需要终止它的情况下调用此方法.

要保存对象,您应该将代码放入applicationDidEnterBackground:也是如此.

在iOS 4.0及更高版本中,当用户退出支持后台执行的应用程序时,将调用此方法而不是applicationWillTerminate:方法.您应该使用此方法释放共享资源,保存用户数据,使计时器无效,并存储足够的应用程序状态信息,以便将应用程序恢复到当前状态,以防以后终止.您还应该禁用应用程序用户界面的更新,并避免使用某些类型的共享系统资源(例如用户的联系人数据库).您还必须避免在后台使用OpenGL ES.


要保存字典而不是数组,只需将所有出现的Array替换为Dictionary


并修复泄漏

tmpArray  = [[NSMutableArray alloc] init]; // not used, not released but `alloc`ed.
tmpArray = [NSKeyedUnarchiver unarchiveObjectWithData:dat];
Run Code Online (Sandbox Code Playgroud)

删除第一行.