Iphone 将NSArray保存到NSUserDefaults并在NSMutableArray中获取它
如何在Iphone 将NSArray保存到NSUserDefaults并在NSMutableArray中获取它,iphone,objective-c,ios,cocoa-touch,Iphone,Objective C,Ios,Cocoa Touch,如何在nsserdefaults中保存NSArray,然后将其加载回NSMutableArray以填充UIPickerView 还有一个问题是,新值将添加到NSMutableArray中,然后该数组将转换为NSArray,保存在nsserdefaults中(因为NSMutableArray无法保存在nsserdefaults中) 谢谢你的帮助 感谢从nsserdefaults恢复NSArray后,使用[[NSMutableArray alloc]initWithArray:][/code>获取N
nsserdefaults
中保存NSArray
,然后将其加载回NSMutableArray
以填充UIPickerView
还有一个问题是,新值将添加到
NSMutableArray
中,然后该数组将转换为NSArray
,保存在nsserdefaults
中(因为NSMutableArray
无法保存在nsserdefaults
中)
谢谢你的帮助
感谢从
nsserdefaults
恢复NSArray
后,使用[[NSMutableArray alloc]initWithArray:][/code>获取NSMutableArray
实例
[[NSUserDefaults standardUserDefaults] setObject:yourMutableArray forKey:@"Key"];
可以存储可变数组,因为它是NSArray的子类
要获取作为NSMutableArray的值,请执行以下操作:
NSMutableArray *array = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"Key"]];
[array mutableCopy];
或
要将NSArray转换为NSMutableArray,请执行以下操作:
NSMutableArray *array = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"Key"]];
[array mutableCopy];
要将NSMutableArray转换为NSArray,请执行以下操作:
[NSArray arrayWithArray:array];
编辑:mutableCopy需要稍后发布,因为它是一个副本
,因为许多新的iOS开发者都在考虑这个问题。我想添加更多内容来帮助新手
// Store it
[[NSUserDefaults standardUserDefaults] setObject:yourMutableArray forKey:@"Key"];
[[NSUserDefaults standardUserDefaults] synchronize];
// Read it back
NSMutableArray* myMutableArrayAgain = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"Key"]];
-(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);
}
}
我希望这将帮助您将NSArray
保存到nsserdefaults
中,然后将其作为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];
NSMutableArray
可以存储,因为它继承了NSArray
的属性。Thanx Vignesh,但是如果某个字符串值被更改,比如数组“one the road”中有一个值,并且它被更新为“on the road rite now”,那么我们如何处理这个问题,以便同样的字符串也会在nsuserdefaults中更新,因为下次新更新的数组将在选择器视图中填充。它是possible@illoGicalError. 欢迎使用。您必须使用修改后的数组更新NSUserDefaults。您可以使用第一行代码存储更新的数组。就这样?无归档等。数组也可以包含复杂对象吗?可以存储什么类型的对象?对于复杂对象,必须使用归档。NSUserDafaults不知道如何封送对象。arrayWithArray方法是我的关键,我尝试了各种getter将数组直接设置为从userdefaults读取的对象。谢谢Vignesh!另外,要将可变的转换为不可变的,您可以执行:[mutableArray copy];