Reputation: 6668
I am stumped here. I am just trying to save an NSArray populated with either NSNumbers or NSStrings to NSUserDefaults. Weird thing is it works if I save it right before I read it - but if I don't save it and read it (after it has been saved on a prior launch) it is nil. It is like the defaults are being wiped out each time I hit Run (Command-R) in XCode.
NSArray *arrayToSave = [NSArray arrayWithObjects: [NSNumber numberWithInt:1], [NSNumber numberWithInt:2], [NSNumber numberWithInt:3], nil];
[[NSUserDefaults standardUserDefaults] setObject:arrayToSave forKey:@"TestKey"]; //if I comment this line arrayRead will be nil even after I had saved it with this line on a prior run
Read it:
NSArray *arrayRead = [[NSUserDefaults standardUserDefaults] objectForKey: @"TestKey"];
NSLog(@"arrayRead: %@", arrayRead);
Upvotes: 0
Views: 778
Reputation: 27506
You should call synchronize
after writing to user defaults:
// Write
NSArray *arrayToSave = [NSArray arrayWithObjects: [NSNumber numberWithInt:1], [NSNumber numberWithInt:2], [NSNumber numberWithInt:3], nil];
[[NSUserDefaults standardUserDefaults] setObject:arrayToSave forKey:@"TestKey"];
[[NSUserDefaults standardUserDefaults] synchronize];
// Read
NSArray *arrayRead = [[NSUserDefaults standardUserDefaults] objectForKey:@"TestKey"]; // or arrayForKey
NSLog(@"arrayRead: %@", arrayRead);
Upvotes: 2
Reputation: 3847
Try the following:
Save:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *arr = ... ; // set value
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:arr];
[defaults setObject:data forKey:@"TestKey"];
Load:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [defaults objectForKey:@"TestKey"];
NSArray *arr = [NSKeyedUnarchiver unarchiveObjectWithData:data];
Upvotes: 0