我需要在nsuserdefaults中保存nsmutabledictary。我已经搜索了Web的许多例子,但没有收到任何相关的任何相关的例子。有人可以发布一小块代码,它将在关闭的NsuserDefaults中保存一个nsmutabledictary,并在启动应用程序时检索它吗?还可以告诉我在哪里放置代码。

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

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"];
}
.

是,它是一个数组,但我需要一个用于nsmutabledicticary。

有帮助吗?

解决方案

applicationWillterminate:

对于不支持背景执行或与iOS 3.x或更早版本链接的应用程序,当用户退出应用程序时始终调用此方法。 对于支持背景执行的应用程序,当用户退出应用程序时,通常不会调用此方法,因为应用程序在这种情况下只是移动到背景。但是,可以在应用程序的情况下调用此方法在后台运行(未暂停),系统需要出于某种原因终止它。 要保存您的对象,您应该将代码放入 applicationdidenterbackground:

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


保存字典而不是数组只是替换具有字典的所有阵列


并修复泄漏

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

删除第一行。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top