2014-08-28 2 views
1

Вот мой код:NSUserDefaults - Вставка массив как объект не работает

NSMutableDictionary *newThoughtDict = [[NSMutableDictionary alloc] init]; 
[newThoughtDict setObject:self.triggerOne.text forKey:@"thought"]; 
[newThoughtDict setObject:self.date forKey:@"date"]; 

NSDate *currentDate = [[NSDate alloc] initWithTimeIntervalSince1970:NSTimeIntervalSince1970]; 
[newThoughtDict setObject:currentDate forKey:@"date"]; 

NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults]; 
NSData *arrayData = [currentDefaults objectForKey:@"thoughtArray"]; 
if (arrayData != nil) 
{ 
    NSMutableArray *savedArray = [NSKeyedUnarchiver unarchiveObjectWithData:arrayData]; 
    [savedArray insertObject:newThoughtDict atIndex:0]; //<---error being thrown here 
    [currentDefaults setObject:[NSKeyedArchiver archivedDataWithRootObject:savedArray] forKey:@"thoughtArray"]; 
    [currentDefaults synchronize]; 

Ошибка броска является: - [__ NSArrayI insertObject: atIndex]: непризнанные селектор направлен например 0x170200150

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

Также, когда я тестирую приложение , он должен вернуть «ноль», потому что я еще не на самом деле c восстановить объект NSUserDefault и ключ.

Спасибо.

ответ

3

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

+0

даже после редактирования инструкции if, так что она по-прежнему не работает: NSArray * unmutableArray = [NSKeyedUnarchiver unarchiveObjectWithData: arrayData]; NSMutableArray * savedArray = [unmutableArray copy]; [savedArray insertObject: newThoughtDict atIndex: 0]; ошибка в том же месте – Broderick

+2

копия * тоже * не делает изменяемую копию. Вы должны вызвать mutableCopy –

Смежные вопросы