Я пробовал все, что я могу придумать, и все предложения, приведенные для исправления этой ошибки. Приложение отлично работает на iOS-симуляторе, но оно падает на физическом устройстве (мой iPhone 5).метод мутирования, отправленный на неизменяемый объект, происходит только на физическом устройстве
Здесь ошибка я получаю:
2015-01-23 16:26:43.232 Kyle's App[2343:773183] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object'
Декларация свойств этого класса являются:
@property (strong, nonatomic) NSUserDefaults *defaults;
@property (strong, nonatomic) NSMutableArray *classes;
@property (strong, nonatomic) NSMutableArray *foundClasses;
все они инициализируются изменяемых объектов, для пользователя по умолчанию за исключением и метод, в котором возникает ошибка:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSMutableArray *notes = [[NSMutableArray alloc] initWithArray:self.classes[indexPath.row][@"notes"]];
[notes addObject:[[self.defaults objectForKey:@"New Note"] mutableCopy]];
self.classes[indexPath.row][@"notes"] = [notes mutableCopy];//problem
[self.defaults setObject:@(indexPath.row) forKey:@"Current Class"];
[self.defaults setObject:self.classes forKey:@"Classes"];
[self.defaults setObject:[self.defaults objectForKey:@"New Note"] forKey:@"Current Note"];
[self.defaults setObject:@YES forKey:@"Created New Note"];
[self.defaults synchronize];
[self performSegueWithIdentifier:@"Show Summary" sender:self];
}
Линия который производит ошибку self.classes[indexPath.row][@"notes"] = [notes mutableCopy];//problem
Вся помощь очень ценится, и я приношу свои извинения, если что-то не так, так как это моя первая публикация на StackOverflow. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.
Спасибо.
UPDATE- У меня есть код, в котором словарь инициализирован, и я не уверен, как он по-прежнему неизменен.
[self.classes addObject:(NSMutableDictionary *)@{
@"title": textField.text,
@"notes": [[NSMutableArray alloc] init]//(NSMutableArray *)@[]
}];
Где код, в который вы помещаете словари в 'self.classes'? Вы должны быть уверены, что добавляете 'NSMutableDictionary', а не' NSDictionary'. – rmaddy
Ваш массив заметок является изменчивым массивом, поэтому метод 'mutableCopy' не нужен – stosha
Попробуйте это 'self.classes [indexPath.row] [@" notes "] = [notes copy];' – Saif