2017-02-12 13 views
0

NSUserDefaultsから配列を取得した直後にNSMutableArrayの値を変更しようとしたときにMutating method sent to immutable objectエラーが発生しました。mutableCopy()で不変オブジェクトエラーに送信されたメソッド

generalDone[self.todoTableView.selectedRow] = 1 

私は1 NSMutableArrayにすべてNSMutableArray Sを追加しているNSUserDefaultsに保存します。好き。

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-

+0

は、私が聞いても言うことができますか? Objective-C Cocoaクラスです。 _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配列を変更可能にするには、で宣言し、letではありません。 generalTodosは、文字列の配列である場合たとえば、あなたはすべてのNSArrayの/ NSMutableArrayのを使用している理由

var generalTodos = [String]() 
関連する問題