NSMutableArray, сохраненный в NSUserDefaults, не будет сохранять данные - PullRequest
1 голос
/ 08 августа 2011

Когда пользователь входит через мое приложение для iPhone, я создаю группу элементов по умолчанию в NSUserDefaults. Одним из них является NSMutableArray, который я добавляю следующим образом:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSMutableArray *theArray = [NSMutableArray array];
[prefs setObject:theArray forKey:@"theArray"];

Это работает безупречно. Однако, когда я хочу вставить или извлечь значения из theArray, что-то идет не так. Вот выдержка из другого файла в моем приложении:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[[prefs objectForKey:@"theArray"] setValue:@"This is a value" forKey:@"aValue"];
NSLog(@"%@", [[prefs objectForKey:@"theArray"] valueForKey:@"aValue"]);

Я ожидал бы увидеть «Это значение» в консоли после запуска кода, но вместо этого я получаю следующее:

2011-08-08 18:35:17.503 MyApp[7993:10d03] (
)

Почему массив пуст? Я пробовал то же самое, используя NSArray с тем же результатом.

Ответы [ 2 ]

10 голосов
/ 08 августа 2011

Когда вы сохраняете изменяемые объекты в NSUserDefaults, он сохраняет неизменяемую копию, поэтому вы не можете изменить их напрямую таким образом.Вы должны получить изменяемую копию из значений по умолчанию, изменить ее, а затем вернуть обратно, заменив старый объект по умолчанию.

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSMutableArray *mutableArrayCopy = [[prefs objectForKey:@"theArray"] mutableCopy];
[mutableArrayCopy addObject:@"some new value"];
[prefs setObject:mutableArrayCopy forKey:@"theArray"];
[mutableArrayCopy release];
0 голосов
/ 30 августа 2013

NSArray * saveArray = [NSArray arrayWithObjects: @ "obj1", @ "obj2", @ "obj3", nil];
NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject: сохраненный массив для ключа: @ "key_for_savedArray"];
[userDefaults синхронизировать];

// Для извлечения массива используйте:

NSArray * retrivedArray = [userDefaults objectForKey: @ "key_for_savedArray"];

...