2012-02-09 13 views
35

NSArrayNSUserDefaultsに保存してからNSMutableArrayにロードしてUIPickerViewを追加するにはどうすればよいですか?NSArrayをNSUserDefaultsに保存してNSMutableArrayに取得する

また問題は、新しい値がそのNSMutableArrayに追加されると(NSMutableArrayNSUserDefaultsで保存することができないように)、その配列がNSUserDefaultsに保存するNSArrayに変換されることです。

すべてのヘルプ感謝..

おかげ

+1

、それは 'NSArray'のプロパティを継承しますので、' NSMutableArray'を保存することができます。 – Ilanchezhian

答えて

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

NSArrayのサブクラスであるため、変更可能な配列を格納することができます。

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

または

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

Thanx Vigneshしかし、配列 "1つの道路"に値があり、 "道路儀式"として更新された場合のように、文字列の値が変更された場合、どうすればこの文字列を扱うことができますか? nsuserdefaultsでも更新されます。これは、新しい更新された配列がピッカービューに移入されるためです。それは可能です –

+0

@illoGicalError。ようこそ。あなたはNSUserDefaultsを変更された配列で更新する必要があります。最初のコード行を使用して、更新された配列を格納できます。 – Vignesh

+0

それは? archievingはありません。配列には複雑なオブジェクトも含まれていますか?どのような種類のオブジェクトを保存できますか? –

2

NSUserDefaultsからNSArrayを回復した後[[NSMutableArray alloc] initWithArray:]を使用してNSMutableArrayインスタンスを取得します。

4

をNSArrayのからNSMutableArrayのに変換するには::

[array mutableCopy]; 

NSMutableArrayのからにNSArrayに変換するには:NSMutableArrayのよう値を取得するには

[NSArray arrayWithArray:array]; 

編集:mutableCopyは、copyであるため、後でリリースする必要があります。

+0

また、変更可能なものから変更不可能なものに変換するには、次の操作を実行できます。 [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

この質問は多くの新しいiOS開発者が見ています。初心者を助けるためにもっと追加したい

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

私は、これはNSUserDefaultsNSArrayを保存するためのお手伝いをしてからNSMutableArrayその逆として、それを取得することを願っています。あなたが好きこのメソッドを呼び出すことができます

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]; 
関連する問題