Короче после получения массивов от NSUserDefaults
Я получаю Mutating method sent to immutable object
ошибка при попытке изменить NSMutableArray
value;Метод мутирования, отправленный в неизменяемую ошибку объекта с mutableCopy()
generalDone[self.todoTableView.selectedRow] = 1
При сохранении NSUserDefaults
я добавляю все NSMutableArray
с до одного NSMutableArray
. Подобно;
var saveArray:NSMutableArray = NSMutableArray()
saveArray.removeAllObjects()
saveArray.add(generalTodos)
..
..
..
saveArray.add(generalDone)
UserDefaults.standard.set(saveArray, forKey: "test3")
Но когда я получаю массивы из NSUserDefault Я уверен, что это mutableCopy().
if UserDefaults.standard.value(forKey: "test3") != nil {
saveArray = UserDefaults.standard.mutableArrayValue(forKey: "test3").mutableCopy() as! NSMutableArray
generalTodos = saveArray[0] as! NSMutableArray
generalDone = saveArray[1] as! NSMutableArray
}
По-прежнему возникает такая же ошибка. Может быть, глупая идея, но я думаю, что массивы в saveArrays все еще не изменяемы. Но не знаю, как ими управлять. Каковы ваши идеи?
Попытка узнать быстро. Пожалуйста, будьте вежливы. -_-
Могу ли я спросить, почему вы используете NSArray/NSMutableArray вообще? Это классы Cocoa Objective-C. Вы должны использовать _Swift_ массивы. Они делают вещи намного проще. – matt
«но я думаю, что массивы в saveArrays все еще не изменяемы». Хорошее мышление. Возможно, вы создаете изменчивую копию 'saveArrays', но это не делает измененные в ней массивы. – matt
Также я бы посоветовал не сохранять массив массивов в NSUserDefaults. Просто сохраните 'generalTodos' как свой собственный массив со своим собственным ключом. – matt