1

我需要在 NSUserDefaults 中保存一个 NSMutableDictionary。我在网上搜索了很多例子,但没有收到任何足够相关的例子。有人可以发布一小段代码,在关闭时将 NSMutableDictionary 保存在 NSUserDefaults 中并在应用程序启动时检索它吗?也请你告诉我在哪里放置代码。

我自己有一些代码,但它不起作用。

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。

4

1 回答 1

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];

通过删除第一行。

于 2011-03-26T07:55:05.537 回答