2017-02-12 40 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]() 
相關問題