【问题标题】:Storing NSMutableArray with NSUserDefaults使用 NSUserDefaults 存储 NSMutableArray
【发布时间】:2011-05-10 16:41:54
【问题描述】:

在我的项目中,我在我的应用委托中使用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 方法吗?特别是,您是否跟进了同步调用?
  • 是的,这是我完整的 applicationWillTerminate 方法?我不明白第二个问题...

标签: objective-c ios nsmutablearray nsuserdefaults


【解决方案1】:

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

【讨论】:

  • [[NSUserDefaults standardUserDefaults] synchronize];
【解决方案2】:

在多任务下,applicationWillTerminate: 通常不会在应用被杀死之前被调用。您可以在更改后立即使用新数组值更新用户默认值(并且,是的,之后调用同步),或者如果由于某种原因您真的想延迟保存到用户默认值,您可以使用 UIApplication applicationWillResignActive: 委托方法代替。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    相关资源
    最近更新 更多