简体   繁体   English

将NSArray保存到NSUserDefaults并将其保存在NSMutableArray中

[英]Saving NSArray to NSUserDefaults and getting it in NSMutableArray

How can I save NSArray in NSUserDefaults and then load it back in an NSMutableArray to populate the UIPickerView ? 如何在NSUserDefaults保存NSArray ,然后将其加载回NSMutableArray以填充UIPickerView

Also the issue is that new values would be added to that NSMutableArray and then that array will be converted to NSArray to be saved in NSUserDefaults (as NSMutableArray can't be saved in NSUserDefaults ). 此外,问题是新值将添加到该NSMutableArray ,然后该数组将转换为NSArray以保存在NSUserDefaults (因为NSMutableArray无法保存在NSUserDefaults )。

Any help appreciated.. 任何帮助赞赏..

Thanks 谢谢

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

A mutable array can be stored since it is a subclass of NSArray. 可以存储可变数组,因为它是NSArray的子​​类。

To get the value as an NSMutableArray: 要获取NSMutableArray的值:

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

or 要么

NSMutableArray *array = [[[NSUserDefaults standardUserDefaults] objectForKey:@"Key"] mutableCopy];
// Store it
    [[NSUserDefaults standardUserDefaults] setObject:yourMutableArray forKey:@"Key"];
    [[NSUserDefaults standardUserDefaults] synchronize];

// Read it back
    NSMutableArray* myMutableArrayAgain = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"Key"]];

To convert from NSArray to NSMutableArray: 要从NSArray转换为NSMutableArray:

[array mutableCopy];

To convert from NSMutableArray to NSArray: 要从NSMutableArray转换为NSArray:

[NSArray arrayWithArray:array];

Edit: mutableCopy will need a release later, since it is a copy . 编辑:mutableCopy稍后需要发布,因为它是一个copy

As this question is being viewed by many new iOS developers. 许多新的iOS开发人员正在查看此问题。 I want to add more to help newbie's. 我想添加更多来帮助新手。

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

I hope this will help you to save NSArray into NSUserDefaults and then retrieving it as NSMutableArray vice versa. 我希望这可以帮助您将NSArray保存到NSUserDefaults ,然后将其作为NSMutableArray检索,反之亦然。

You can call this method like: 您可以将此方法称为:

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

NSUserDefaults恢复NSArray后,使用[[NSMutableArray alloc] initWithArray:]获取NSMutableArray实例。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM