2011-09-27 53 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和包含数组中