2012-02-09 9 views
35

In che modo è possibile salvare in NSUserDefaults e quindi ricaricarlo in un NSMutableArray per popolare UIPickerView?Salvataggio di NSArray in NSUserDefaults e acquisizione in NSMutableArray

Anche il problema è che i nuovi valori dovrebbero essere inseriti in tale NSMutableArray e quindi tale matrice saranno convertiti in NSArray essere salvati in NSUserDefaults (come NSMutableArray non possono essere salvate in NSUserDefaults).

Qualsiasi aiuto apprezzato ..

Grazie

+1

'NSMutableArray' possono essere immagazzinate in quanto eredita le proprietà di' NSArray'. – Ilanchezhian

risposta

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

Una matrice mutabile può essere memorizzata poiché è una sottoclasse di NSArray.

per ottenere il valore come NSMutableArray:

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

o

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

Thanx Vignesh, ma cosa succede se un valore di stringa viene modificato come se ci fosse un valore nell'array "one the road" e viene aggiornato come "rite on the road now", quindi come possiamo gestirlo, in modo che la stessa stringa verrebbe aggiornato anche in nsuserdefaults, poiché la prossima volta verrà popolata la nuova matrice aggiornata nella vista di selezione. è possibile –

+0

@illoGicalError. Benvenuto. Dovrai aggiornare NSUserDefaults con l'array modificato. È possibile memorizzare l'array aggiornato utilizzando la prima riga di codice. – Vignesh

+0

Questo è tutto? No archieving, ecc. Inoltre l'array può contenere oggetti complessi? Che tipo di oggetti possono essere memorizzati? –

2

Ottenere NSMutableArray esempio utilizzando [[NSMutableArray alloc] initWithArray:] dopo aver recuperato da NSArrayNSUserDefaults.

4

convertire da NSArray a NSMutableArray:

[array mutableCopy]; 

convertire da NSMutableArray a NSArray:

[NSArray arrayWithArray:array]; 

Modifica: mutableCopy avrà bisogno di una versione successiva, poiché è un copy.

+0

anche per convertire da mutabile a non mutabile si può fare: [copia mutableArray]; – 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

Poiché questa domanda viene visualizzata da molti nuovi sviluppatori iOS. Voglio aggiungere altro per aiutare i principianti.

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

Spero che questo vi aiuterà a risparmiare NSArray in NSUserDefaults e poi il recupero come NSMutableArray viceversa.

È possibile chiamare questo metodo come:

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]; 
Problemi correlati