2012-02-09 5 views
35

Comment puis-je enregistrer NSArray dans NSUserDefaults puis le charger dans un NSMutableArray pour remplir le UIPickerView?Enregistrement de NSArray sur NSUserDefaults et obtention dans NSMutableArray

Aussi la question est que les nouvelles valeurs seraient ajoutées à cette NSMutableArray et ce tableau seront convertis en NSArray être enregistré dans NSUserDefaults (comme NSMutableArray ne peuvent pas être enregistrés dans NSUserDefaults).

Toute aide appréciée ..

Merci

+1

'NSMutableArray' peut être stocké car il hérite des propriétés de' NSArray'. – Ilanchezhian

Répondre

105
[[NSUserDefaults standardUserDefaults] setObject:yourMutableArray forKey:@"Key"]; 

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

Pour obtenir la valeur en tant NSMutableArray:

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

ou

NSMutableArray *array = [[[NSUserDefaults standardUserDefaults] objectForKey:@"Key"] mutableCopy]; 
+0

Thanx Vignesh, Mais que se passe-t-il si une valeur de chaîne est changée comme s'il y a une valeur dans le tableau "one the road" et qu'elle est mise à jour comme "on the road rite now" serait également mis à jour dans nsuserdefaults, car la prochaine fois que le nouveau tableau mis à jour sera rempli dans la vue du sélecteur. Est-il possible? –

+0

@illoGicalError. Bienvenue.Vous devrez mettre à jour votre NSUserDefaults avec le tableau modifié. Vous pouvez stocker le tableau mis à jour en utilisant la première ligne de code. – Vignesh

+0

C'est tout? Aucun archivage, etc. Le tableau peut également contenir des objets complexes? Quel genre d'objets peuvent être stockés? –

2

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

4

Pour convertir de NSArray à NSMutableArray:

[array mutableCopy]; 

Pour convertir de NSMutableArray à NSArray:

[NSArray arrayWithArray:array]; 

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

+0

également pour convertir mutable en non mutable vous pouvez faire: [mutableArray copy]; – quarac

9
// Store it 
    [[NSUserDefaults standardUserDefaults] setObject:yourMutableArray forKey:@"Key"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 

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

Comme cette question est vue par de nombreux nouveaux développeurs iOS. Je veux en 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 à économiser NSArray dans NSUserDefaults puis récupérer comme 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]; 
Questions connexes