2016-07-29 15 views
0

Ich bin neu in Swift Programmierung und habe an einer To-Do List App gearbeitet. Ich versuche, die permanente Datenspeicherung zu verwenden, um die Informationen vom Benutzer eingegeben zu speichern, aber ich bekomme immer den Fehler "Thread 1: signal SIGABRT „Wenn ich das Ausgabeprotokoll überprüft, sehe ich den FehlerThread 1: Signal SIGABRT Muting-Methode an unveränderliches Objekt gesendet '

“ Beenden app aufgrund nicht abgefangene Ausnahme 'NSInternalInconsistencyException', Grund: '- [__ NSCFArray insert: atIndex:]: Mutieren Methode unveränderliches Objekt gesendet'“

Mein Code ist unten ich benutze eine einfache Textbox und eine Schaltfläche:

@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 = "" 

} 
.

Antwort

0

Der Absturz ist genau das, was es bedeutet: Sie können ein unveränderliches Objekt nicht mutieren. Versuchen Sie dies:

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

Hallo .. Danke .. Das hat funktioniert. Aber was ich nicht verstehe ist, welcher Teil im Code ein unveränderliches Objekt ist. Weil ich es als NSMutableArray spezifiziert habe und ich dachte, dass es zuweist und kann später geändert werden. –

+0

** Deklarieren ** die Variable als veränderbar, aber dann zuweisen ** es zu einem unveränderlichen Array machen es unveränderlich. Es ist wahrscheinlich ein Fehler, dass Ihre Zeile 'if let ...' erfolgreich ist –

Verwandte Themen