web-dev-qa-db-fra.com

Enregistrement de NSArray dans NSUserDefaults et obtention de NSMutableArray

Comment puis-je enregistrer NSArray dans NSUserDefaults puis le recharger dans un NSMutableArray pour remplir le UIPickerView?

Le problème est également que de nouvelles valeurs seraient ajoutées à ce NSMutableArray puis ce tableau sera converti en NSArray pour être enregistré dans NSUserDefaults (comme NSMutableArray ne peut pas être enregistré dans NSUserDefaults).

Toute aide appréciée ..

Merci

36
Omer Waqas Khan
 [[NSUserDefaults standardUserDefaults] setObject:yourMutableArray forKey:@"Key"];

Un tableau mutable peut être stocké car il s'agit d'une sous-classe de NSArray.

Pour obtenir la valeur en tant que NSMutableArray:

NSMutableArray *array = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"Key"]];

ou

NSMutableArray *array = [[[NSUserDefaults standardUserDefaults] objectForKey:@"Key"] mutableCopy];
109
Vignesh
// Store it
    [[NSUserDefaults standardUserDefaults] setObject:yourMutableArray forKey:@"Key"];
    [[NSUserDefaults standardUserDefaults] synchronize];

// Read it back
    NSMutableArray* myMutableArrayAgain = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"Key"]];
9
Jonny

Pour convertir de NSArray en NSMutableArray:

[array mutableCopy];

Pour convertir de NSMutableArray en NSArray:

[NSArray arrayWithArray:array];

Edit: mutableCopy aura besoin d'une version plus tard, car il s'agit d'un copy.

4
vakio

Comme cette question est considérée par de nombreux nouveaux développeurs iOS. Je veux ajouter plus pour aider les débutants.

-(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);
    }
}

J'espère que cela vous aidera à enregistrer NSArray dans NSUserDefaults puis à le récupérer sous la forme NSMutableArray vice versa.

Vous pouvez appeler cette méthode comme:

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];
2
Omer Waqas Khan

Obtenez une instance de NSMutableArray à l'aide de [[NSMutableArray alloc] initWithArray:] après avoir récupéré NSArray à partir de NSUserDefaults.

2
barley