在我的项目中,我使用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”。当我重新启动应用程序时,如何在数组中包含零对象?
答案 0 :(得分:4)
在更新applicationWillTerminate中的“array”值后,您需要添加对[NSUserDefaults synchronize]的调用。通常,这会定期为您调用,但在您的情况下,您将在终止时更新值,因此您需要在退出之前明确地保存它。
答案 1 :(得分:0)
在多任务处理下,applicationWillTerminate:通常在应用程序被杀之前不会被调用。您可以在更改后立即使用新数组值更新用户默认值(并且,是的,之后调用synchronize)或者如果由于某种原因您确实希望延迟保存到用户默认值,则可以使用UIApplication applicationWillResignActive:委托方法。