2017-02-12 25 views
0

总之从NSUserDefaults获得数组后,我得到Mutating method sent to immutable object错误,当我试图改变NSMutableArray值;突变方法发送到不可变对象错误与mutableCopy()

generalDone[self.todoTableView.selectedRow] = 1 

当保存到NSUserDefaults我将所有NSMutableArray s到一个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数组仍然不可变。但不知道如何管理它们。你有什么想法?

试图快速学习。请有礼貌。 -_-

+0

请问为什么要使用NSArray/NSMutableArray?他们是Objective-C可可类。你应该使用_Swift_数组。他们让事情变得更容易。 – matt

+0

“但我想在saveArrays阵列仍然不可变”好想法。您可能正在制作'saveArrays'的可变副本,但这并不会使其内部的数组变为可变。 – matt

+0

另外我会建议不要将数组数组保存到NSUserDefaults中。只需使用自己的密钥将'generalTodos'保存为自己的数组。 – matt

回答

1

如果你打算使用Objective-C的NSMutableArray,说as! NSMutableArray不会让一个;做一个NSMutableArray的说法是

let mutableArray = NSMutableArray(array: otherArray) 

但是,你应该使用雨燕的阵列,而不是Objective-C中的NSArray/NSMutableArray里。要使Swift数组变为可变,请使用var而不是let来声明它。例如,如果generalTodos是一串字符串,那么可以说

var generalTodos = [String]() 
相关问题