Reputation: 2413
How can I save NSArray
in NSUserDefaults
and then load it back in an NSMutableArray
to populate the UIPickerView
?
Also the issue is that new values would be added to that NSMutableArray
and then that array will be converted to NSArray
to be saved in NSUserDefaults
(as NSMutableArray
can't be saved in NSUserDefaults
).
Any help appreciated..
Thanks
Upvotes: 39
Views: 44277
Reputation: 16298
// Store it
[[NSUserDefaults standardUserDefaults] setObject:yourMutableArray forKey:@"Key"];
[[NSUserDefaults standardUserDefaults] synchronize];
// Read it back
NSMutableArray* myMutableArrayAgain = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"Key"]];
Upvotes: 10
Reputation: 10251
[[NSUserDefaults standardUserDefaults] setObject:yourMutableArray forKey:@"Key"];
A mutable array can be stored since it is a subclass of NSArray.
To get the value as an NSMutableArray:
NSMutableArray *array = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"Key"]];
or
NSMutableArray *array = [[[NSUserDefaults standardUserDefaults] objectForKey:@"Key"] mutableCopy];
Upvotes: 112
Reputation: 2413
As this question is being viewed by many new iOS developers. I want to add more to help newbie's.
-(void)arraysFunction:(NSArray*)array mutArray:(NSMutableArray*)mArray{
if (array == nil || [array count] == 0) {
[[NSUserDefaults standardUserDefaults] setObject:mArray forKey:@"mutableArray"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"Mutable Array: %@",[[NSUserDefaults standardUserDefaults] objectForKey:@"mutableArray"]);
NSArray * simpleArray = [ NSArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"mutableArray"]];
NSLog(@"Simple Array: %@", simpleArray);
}
else{
[[NSUserDefaults standardUserDefaults] setObject:array forKey:@"array"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"Simple Array: %@",[[NSUserDefaults standardUserDefaults] objectForKey:@"array"]);
NSMutableArray * mutableArray = [NSMutableArray arrayWithArray:[[[NSUserDefaults standardUserDefaults] objectForKey:@"array"] mutableCopy]];
NSLog(@"Mutable Array: %@", mutableArray);
}
}
I hope this will help you to save NSArray
into NSUserDefaults
and then retrieving it as NSMutableArray
vice versa.
You can call this method like:
NSArray * array = [[NSArray alloc] initWithObjects:@"A", @"B", @"C", nil];
NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"D", @"E", @"F", nil];
[self arraysFunction:array mutArray:nil];
[self arraysFunction:nil mutArray:mutableArray];
Upvotes: 2
Reputation: 3177
To convert from NSArray to NSMutableArray:
[array mutableCopy];
To convert from NSMutableArray to NSArray:
[NSArray arrayWithArray:array];
Edit: mutableCopy will need a release later, since it is a copy
.
Upvotes: 4
Reputation: 4463
Obtain NSMutableArray
instance using [[NSMutableArray alloc] initWithArray:]
after recovering NSArray
from NSUserDefaults
.
Upvotes: 2