2011-05-10 62 views
3

在项目中,我在我的应用程序委托使用NSMutableArrayNSUserDefaults贮藏NSMutableArray里与NSUserDefaults的

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

array = [[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"array"]]; 

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

    [[NSUserDefaults standardUserDefaults] setObject:array forKey:@"array"]; 

的问题是,当我写的一类,例如, firstViewController.m,viewdidload:

NSLog(@"number of element:%d", appDelegate.array.count); 

结果总是“2” “但如果我写

[appDelegate.array removeAllObjects]; 

然后count的结果是”0“。当我重新启动应用程序时,计数再次为“2”。当我重新启动应用程序时,我可以做些什么来让数组中有零对象?

+0

这是您完整的applicationWillTerminate方法吗?特别是,你跟进了一个电话同步? – ondmike 2011-05-10 17:03:50

+0

是的,这是我的完整applicationWillTerminate方法?我不明白第二个问题... – CrazyDev 2011-05-10 17:09:05

回答

4

在更新applicationWillTerminate中的“array”值之后,您需要添加对 - [NSUserDefaults synchronize]的调用。通常,这是为你定期调用的,但在你的情况下,你正在更新终止值,所以你需要在退出之前明确地保存它。

+0

我该怎么做? – CrazyDev 2011-05-11 07:16:29

+0

'[[NSUserDefaults standardUserDefaults] synchronize];' – ondmike 2011-05-12 13:14:03

+0

我尝试过,但它不工作; (我在设备中进行调试) – CrazyDev 2011-05-12 13:15:44

0

在多任务处理下,applicationWillTerminate:通常在应用程序被终止前不会调用。您可以在更改用户默认值后立即使用新的数组值(并且之后调用同步),或者如果由于某种原因想要延迟保存为用户默认值,则可以使用UIApplication applicationWillResignActive:delegate方法。