2011-09-27 51 views
8

我想存儲陣列與NSUserDefault,然後,我把applicationDidEnterBackgroundIOS:存儲陣列與NSUserDefault

[[NSUserDefaults standardUserDefaults] setObject:myArray forKey:@"myArray"]; 

application didFinishLaunchingWithOption

myArray= [[NSMutableArray alloc] 
      initWithArray:[[NSUserDefaults standardUserDefaults] 
      objectForKey:@"myArray"]]; 

它的確定多任務處理裝置,但對於不是多任務設備,我該如何解決?

回答

10

存放在NSUserDefaults中的對象-applicationWillTerminate:,如果它尚未保存由-applicationDidEnterBackground:調用(即檢查是否支持多任務處理,如果是,那麼不救它,因爲它已經被保存)。

- (void) applicationWillTerminate:(UIApplication *) app { 
    if([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)] && 
     ![[UIDevice currentDevice] isMultitaskingSupported]) { 
     [[NSUserDefaults standardUserDefaults] setObject:myArray forKey:@"myArray"]; 
    } 
} 
+0

正如在另一個答案中指出的,您需要在設置對象後同步默認值。 [[NSUserDefaults standardUserDefaults] synchronize]; – user3246173

0

保存在NSUserDefaults的

- (void)applicationWillTerminate:(UIApplication *)application 
0

設置

[[NSUserDefaults standardUserDefaults] setObject:myArray forKey:@"myArray"]; 

applicationWillTerminate 
3

以前的答案是正確的,但要注意的是,無論applicationDidEnterBackground也不applicationWillTerminate保證在任何情況下被調用。每當它發生變化時,您通常都會更好地存儲重要數據。

7

不要忘了再進後臺同步緩衝:

[[NSUserDefaults standardUserDefaults] synchronize]; 
0

,不要忘記使用您試圖保存對象內部的encodeWithCoder和的initWithCoder和包含數組中