Программа получила сигнал: SIGABRT при вставке объекта в NSMutableArray - PullRequest
2 голосов
/ 19 октября 2011

Когда я пытаюсь вставить объект в мой NSMutableArray, я получаю сообщение об ошибке «Программа получила сигнал: SIGABRT», однако я не понимаю, почему.

Вот мой код, а именно insertObject:value вызывает ошибку.

NSMutableDictionary *myDictionary = [NSMutableDictionary dictionary];
[myDictionary setValue:valueName.text forKey:kValueName];
[myDictionary setObject:subValuesList forKey:kSubValuesList];

MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
int position = appDelegate.position;

NSMutableArray *valuesList = [[NSUserDefaults standardUserDefaults] objectForKey:kValuesArray];
[valuesList insertObject:myDictionary atIndex:position];

Ответы [ 2 ]

7 голосов
/ 19 октября 2011

Значения, возвращаемые из NSUserDefaults, являются неизменяемыми, даже если в качестве значения установлен изменяемый объект.

Вам нужно сделать изменяемую копию после извлечения массива из NSUserDefaults. К счастью для вас, NSArray соответствует протоколу NSMutableCopying, поэтому вам просто нужно отправить mutableCopy сообщение в массив:

NSMutableArray *valuesList = [[[NSUserDefaults standardUserDefaults] objectForKey:kValuesArray] mutableCopy];

Имейте в виду, что вам принадлежит объект, возвращаемый mutableCopy в соответствии с Правилами управления памятью . Другими словами, вы должны отпустить его, когда закончите.

0 голосов
/ 19 октября 2011

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

Можно ли сохранить целочисленный массив с помощью NSUserDefaults на iPhone?

...