Сохранение NSArray в NSUserDefaults и получение его в NSMutableArray

Как сохранить NSArray в NSUserDefaults, а затем загрузить его обратно в NSMutableArray, чтобы заполнить UIPickerView?

Также проблема заключается в том, что к этому NSMutableArray будут добавлены новые значения, а затем этот массив будет преобразован в NSArray для сохранения в NSUserDefaults (поскольку NSMutableArray не может быть сохранен в NSUserDefaults).

Любая помощь приветствуется.

Спасибо

Ответ 1

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

Изменчивый массив может быть сохранен, поскольку он является подклассом NSArray.

Чтобы получить значение как NSMutableArray:

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

или

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

Ответ 2

// Store it
    [[NSUserDefaults standardUserDefaults] setObject:yourMutableArray forKey:@"Key"];
    [[NSUserDefaults standardUserDefaults] synchronize];

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

Ответ 3

Чтобы преобразовать из NSArray в NSMutableArray:

[array mutableCopy];

Для преобразования из NSMutableArray в NSArray:

[NSArray arrayWithArray:array];

Изменить: mutableCopy потребуется выпуск позже, так как это copy.

Ответ 4

Получить NSMutableArray экземпляр с помощью [[NSMutableArray alloc] initWithArray:] после восстановления NSArray из NSUserDefaults.

Ответ 5

Поскольку этот вопрос рассматривается многими новыми разработчиками 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);
    }
}

Надеюсь, это поможет вам сохранить NSArray в NSUserDefaults, а затем вернуть его как 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];