2011-05-10 51 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方法。