2012-02-09 117 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]; 
相关问题