Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 将NSArray保存到NSUserDefaults并在NSMutableArray中获取它_Iphone_Objective C_Ios_Cocoa Touch - Fatal编程技术网

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