1

我需要在NSUserDefaults中保存一个NSMutableDictionary。我在网上搜索了很多例子,但没有收到足够相关的例子。有人可以发布一小段代码来关闭NSUserDefaults中的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。

+0

我觉得问题不在于NSUserDefaults。可能是您放置代码的地方可能无法为您保存数据。你可以发布整个appDelegate方法吗?你也可以放一个断点,看看NSMutableDictionary是否保存在NSUserDefaults中? – 2011-03-26 06:43:38

回答

5

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

通过去除所述第一线。