2011-09-27 36 views
8

Tôi muốn để lưu trữ một mảng với NSUserDefault, sau đó, tôi đặt trong applicationDidEnterBackgroundIOS: lưu trữ một mảng với NSUserDefault

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

và trong application didFinishLaunchingWithOption

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

nó ok cho thiết bị đa nhiệm, nhưng đối với không đa nhiệm thiết bị, làm thế nào tôi có thể giải quyết?

Trả lời

10

Lưu trữ đối tượng trong NSUserDefaults trong -applicationWillTerminate:, nếu nó chưa được lưu bằng cách gọi -applicationDidEnterBackground: (nghĩa là kiểm tra xem đa nhiệm có được hỗ trợ không, nếu không, đừng lưu nó vì nó đã được lưu.)

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

Như được chỉ ra trong câu trả lời khác, bạn cần phải đồng bộ hóa các giá trị mặc định sau khi đặt đối tượng. [[NSUserDefaults standardUserDefaults] synchronize]; – user3246173

0

Lưu NSUserDefaults tại

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

thiết

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

trong

applicationWillTerminate 
3

Những câu trả lời trước đó đều đúng, nhưng lưu ý rằng không phải applicationDidEnterBackground cũng không applicationWillTerminate được đảm bảo để được gọi trong mọi tình huống. Bạn thường tốt hơn để lưu trữ dữ liệu quan trọng bất cứ khi nào nó đã thay đổi.

7

Đừng quên để đồng bộ hóa bộ đệm trước khi đi vào nền:

[[NSUserDefaults standardUserDefaults] synchronize]; 
0

và đừng quên sử dụng encodeWithCoder và initWithCoder bên trong đối tượng mà bạn đang cố gắng để tiết kiệm và được chứa trong mảng

Các vấn đề liên quan