Omer Waqas Khan
Omer Waqas Khan

Reputation: 2413

Saving NSArray to NSUserDefaults and getting it in NSMutableArray

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

Answers (5)

Jonny
Jonny

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

Vignesh
Vignesh

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

Omer Waqas Khan
Omer Waqas Khan

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

vakio
vakio

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

barley
barley

Reputation: 4463

Obtain NSMutableArray instance using [[NSMutableArray alloc] initWithArray:] after recovering NSArray from NSUserDefaults.

Upvotes: 2

Related Questions