使用NSUserDefaults存储NSMutableArray

时间:2011-05-10 16:41:55

标签: objective-c ios nsmutablearray nsuserdefaults

在我的项目中,我使用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];

然后计数结果为“0”。当我重新启动应用程序时,计数再次为“2”。当我重新启动应用程序时,如何在数组中包含零对象?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

在多任务处理下,applicationWillTerminate:通常在应用程序被杀之前不会被调用。您可以在更改后立即使用新数组值更新用户默认值(并且,是的,之后调用synchronize)或者如果由于某种原因您确实希望延迟保存到用户默认值,则可以使用UIApplication applicationWillResignActive:委托方法。