2016-07-29 8 views
0

私はSwiftプログラミングには新しく、To-Do Listアプリケーションで作業しています。私は、ユーザーが入力した情報を保存する永続データストレージを使用しようとしていますが、私はエラー"Thread 1: signal SIGABRTを取得しておく「私は、出力ログをチェックすると、私はエラーにスレッド1:シグナルSIGABRT変異メソッドが不変オブジェクトに送信されました。 '

を参照してください」キャッチされない例外によりにアプリを終了します 'NSInternalInconsistencyException'、理由: ' - [__ NSCFArray は、insertObject:atIndex:]:不変オブジェクトに送られた変異法'」

私のコードは以下の通りです私は、単純なテキストボックスとボタンを使用します。

@IBOutlet var text1: UITextField! 

@IBAction func button1(_ sender: AnyObject) { 

    let listObject = UserDefaults.standard.object(forKey: "lists") 

    var items:NSMutableArray 

    if let tempitems = listObject as? NSMutableArray { 

     items = tempitems 

     items.addObjects(from: [text1.text!]) 

    } else { 

     items = [text1.text!] 

    } 

    UserDefaults.standard.set(items, forKey: "lists") 

    text1.text = "" 

} 
を。

答えて

0

クラッシュはまさにその意味です。不変なオブジェクトを変更することはできません。試してみてください:

var items: NSMutableArray! 

if let listObject = UserDefaults.standard.object(forKey: "lists") as? NSArray { 
    items = listObject.mutableCopy() as! NSMutableArray 
} else { 
    items = NSMutableArray() 
} 

items.addObjects(from: [text1.text!]) 
+0

こんにちは..ありがとうございました。しかし、私が理解していないことは、コードのどの部分が不変のオブジェクトであるかということです。 NSMutableArrayとして指定したので、後で変更することができると思います。 –

+0

**変数を可変であると宣言してから**不変の配列に割り当てる**不変にします。おそらくあなたの 'if let ...'行が成功するバグでしょう –

関連する問題