使用mutableCopy()发送到immutable对象错误的变异方法

时间:2017-02-12 16:47:58

标签: swift nsmutablearray

NSUserDefaults获取数组后,我在尝试更改Mutating method sent to immutable object值时遇到NSMutableArray错误;

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中的数组仍然不可变。但不知道如何管理它们。你的想法是什么?

努力学习快速。请礼貌。 -_-

1 个答案:

答案 0 :(得分:1)

如果你打算使用Objective-C NSMutableArray,说as! NSMutableArray不会成为一个;制作NSMutableArray的方法就是说

let mutableArray = NSMutableArray(array: otherArray)

但是你应该使用Swift数组,而不是Objective-C NSArray / NSMutableArray。要使Swift数组变为可变,请使用var声明它,而不是let。例如,如果generalTodos是一个字符串数组,您可以说

var generalTodos = [String]()