将NSMutableArray与NSUserDefaults一起存储

3

在我的项目中,我在应用程序委托中使用了一个NSMutableArrayNSUserDefaults

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

然后计数器的结果是“0”。当我重新启动应用程序时,计数器又变成了“2”。我该怎么做才能在重新启动应用程序时将数组中的对象清零?


这是你的完整的applicationWillTerminate方法吗?特别是,你是否跟进调用同步的操作? - ondmike
是的,这是我的完整的applicationWillTerminate方法。我不明白第二个问题... - cyclingIsBetter
2个回答

4

在 applicationWillTerminate 中更新 "array" 值后,您需要添加对 -[NSUserDefaults synchronize] 的调用。通常情况下,系统会定期为您调用此方法,但在您的情况下,您需要在退出之前显式保存该值。


[[NSUserDefaults standardUserDefaults] synchronize]; - ondmike

0
在多任务处理下,应用程序终止通常在应用程序被杀死之前不会被调用。您可以在更改后立即使用新的数组值更新用户默认设置(并且确实在此之后调用同步),或者如果出于某种原因您真的想延迟保存到用户默认设置,则可以使用UIApplication applicationWillResignActive:委托方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接