2012-02-09 162 views
35

如何將NSArray保存在NSUserDefaults中,然後將其加載回NSMutableArray以填充UIPickerView將NSArray保存爲NSUserDefaults並將其保存在NSMutableArray中

另外的問題是,新值將被添加到該NSMutableArray然後該數組將被轉換爲NSArray要保存在NSUserDefaults(如NSMutableArray不能在NSUserDefaults被保存)。

知道的任何幫助..

感謝

+1

'NSMutableArray'可以存儲,因爲它繼承NSArray'的'性能。 – Ilanchezhian 2012-02-09 14:18:04

回答

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

可變數組可以存儲,因爲它是NSArray的子​​類。

要獲得該值作爲一個NSMutableArray:

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

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

Thanx Vignesh,但如果某些字符串值發生了變化,如果數組中有一個值「一條路」,並且它現在更新爲「現在道路儀式」,那麼我們如何處理這個問題,以便相同的字符串也會在nsuserdefaults中更新,因爲下一次在拾取器視圖中會填充新更新的數組。有沒有可能 – 2012-02-09 14:39:50

+0

@illoGicalError。歡迎。您將不得不更新您的NSUserDefaults與修改後的數組。您可以使用第一行代碼存儲更新後的數組。 – Vignesh 2012-02-09 14:44:42

+0

就是這樣?沒有archieving等,也可以數組包含複雜的對象?可以存儲什麼樣的對象? – 2013-09-30 08:33:21

2

NSUserDefaults恢復NSArray後獲得使用[[NSMutableArray alloc] initWithArray:]NSMutableArray實例。

4

從NSArray中轉換成的NSMutableArray:

[array mutableCopy]; 

從NSMutableArray中轉換成的NSArray:

[NSArray arrayWithArray:array]; 

編輯:mutableCopy稍後需要發佈,因爲它是copy

+0

也可以將mutable轉換爲non-mutable,你可以這樣做: [mutableArray copy]; – quarac 2016-06-09 10:02:23

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

我希望這將幫助您節省NSArrayNSUserDefaults,然後檢索它作爲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]; 
相關問題