Сохранение 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];