2016-07-27 3 views
2

Ello! Ich arbeite an einer Notes-App für Mac, mit Swift als Sprache. Ich arbeite gerade an einer Speicher- und Ladefunktion und habe einen Fehler gefunden, von dem ich nicht weiß, wie ich ihn beheben soll. Hier ist der problematische Code:Xcode 7 Swift 2 Fehler: Thread 1: EXC_BAD_INSTRUCTION (Code = EXC_1386_INVOP, SUBCODE = 0X0)

import Cocoa 

class NoteViewController: ViewController { 

    @IBOutlet weak var notefield: NSTextField! 
    @IBOutlet weak var savenamefield: NSTextField! 
    @IBOutlet weak var loadnamefield: NSTextField! 

    @IBAction func save(sender: AnyObject) { 
     // The line below gets the error: Thread 1: EXC_BAD_INSTRUCTION (code=EXC_1386_INVOP, subcode=0x0 
     NSUserDefaults.standardUserDefaults().setObject(notefield.stringValue, forKey: savenamefield.stringValue) 
    } 


    @IBAction func load(sender: AnyObject) { 
     var name = loadnamefield.stringValue; 
     var lnote = NSUserDefaults.standardUserDefaults().objectForKey(name) 
     notefield.stringValue = lnote as! String 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do view setup here. 
    } 

} 

Was könnte ich falsch machen?

+0

Das ist wahrscheinlich das viel geliebte * Unerwartete gefundene nil ... * Fehler. Sind die Ausgänge in Interface Builder verbunden? Zweiter Gedanke: 'lnote' ist' nil' in der 'load' Methode. Übrigens gibt es in 'NSUserDefaults' eine dedizierte 'stringForKey'-Methode. – vadian

+0

Ich wusste nichts über Stringforkey. Ich könnte das versuchen. Danke für die Empfehlung! –

+0

Es tut nicht weh, die Dokumentation zu lesen ;-) Es gibt einige Geheimnisse zu entdecken ... – vadian

Antwort

0

Ich fand es heraus. Bei einigen Tests stellte ich fest, dass alles funktionierte, bis ich notefield.stringValue in den Code eingefügt hatte. Ich erkannte, dass dies ein anderes Fenster war. Der Code deckt 3 verschiedene Fenster ab, von denen 2 Popups sind. notefield ist das einzige Element, das ich im Code vom Hauptfenster hatte. Ich habe alle Elemente in dasselbe Fenster verschoben und das Ganze neu programmiert. Ich habe es funktioniert gut mit dem folgenden Code:

Bitte beachten Sie, dass ich diesen Code nur als Richtlinie liefern. Danke für die Hilfe, die gegeben wurde.