ios - the - unknown class in interface builder file




Ungefangene Ausnahme: Diese Klasse ist nicht mit der Schlüsselwertcodierung kompatibel. (4)

Dies wird normalerweise durch einen Link von Ihrem Storyboard zu einer nicht vorhandenen Eigenschaft verursacht. Überprüfen Sie alle Verknüpfungen von Objekten in Ihrem Storyboard. Auch wenn Sie den Namen oder die Schreibweise einer Eigenschaft oder Methode geändert haben, kann sie immer noch auf die alte verweisen.

Ich verfolge ein Tutorial mit dem Titel "Swift Tutorial für iOS: NSFileManager Persisting Data" und habe einen Fehler um oder nach der 29-Minuten-Marke festgestellt . Wenn ich versuche, es auf dem iOS-Simulator auszuführen, erhalte ich die Fehlermeldung:

Beenden der App aufgrund einer nicht erfassten Ausnahme "NSUnknownKeyException", Grund: "[setValue: forUndefinedKey:]: Diese Klasse ist für den Schlüssel theLoadMethod nicht schlüsselwertcodierungskonform."

Offensichtlich basierend auf dem Fehler, denke ich, dass das Problem meine theLoadMethod . Hier ist der gesamte Code, den ich im Rahmen dieses Projekts im ViewController geschrieben habe:

let theDocumentsFolder = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
let theFileName     = "/theUserFile.txt"
let thePath         = theDocumentsFolder.stringByAppendingString(theFileName)


class ViewController: UIViewController {

@IBOutlet weak var nameTextField: UITextField!
@IBOutlet weak var lastNameTextField: UITextField!
@IBOutlet weak var ageTextField: UITextField!

@IBOutlet weak var theLabel: UILabel!

// The save method
@IBAction func theSaveMethod(sender: AnyObject) {
    var name        = nameTextField.text
    var lastName    = lastNameTextField.text
    var age         = ageTextField.text

    var theString   =   "The user's information is: \(name), \(lastName), \(age)"

    let theFileManager = NSFileManager.defaultManager()

    if !theFileManager.fileExistsAtPath(thePath) {

        var writeError:NSError?
        let fileToBeWritten = theString.writeToFile(thePath, atomically: true, encoding: NSUTF8StringEncoding, error: &writeError)

        if writeError == nil {
            println("No errors. Added: \(theString)")
        } else {
            println("Encountered an error. Error is: \(writeError)")
        }

    } else {
        println("File already exists")
    }

    nameTextField.resignFirstResponder()
    lastNameTextField.resignFirstResponder()
    ageTextField.resignFirstResponder()
}

@IBAction func theLoadMethod(sender: AnyObject) {
    let infoFromFile:String = String.stringWithContentsOfFile(thePath, encoding: NSUTF8StringEncoding, error: nil)!

    theLabel.text = infoFromFile
}

Was mache ich falsch? Soweit mir bekannt ist, sind alle meine iOS-Elemente auf dem Bildschirm korrekt benannt und verknüpft.


Für diejenigen, die mit demselben Problem konfrontiert sind und bereits sichergestellt haben, dass die IBOutlets in Ordnung sind (zumindest im Interface Builder): Stellen Sie sicher, dass das Modul (siehe angefügtes Bild) für Ihren View Controller auf "Current - $" eingestellt ist (PROJEKTNAME)".


Ich hatte ein ähnliches Problem. Ich hatte die vom Benutzer benötigten Felder geändert und einige Felder umbenannt.

Ich habe alle notwendigen Änderungen in syntaktischer Analyse vorgenommen (gelöschte und hinzugefügte Spalten). Das Backend war nicht das Problem.

Ihr Interface Builder-Quellcode enthält weiterhin die alten Attribute.

Zum Beheben klicken Sie mit der rechten Maustaste auf main.storyboard -> Öffnen als -> Quellcode. Suchen Sie nach den Feldern, die Sie entfernt oder umbenannt haben. Löschen oder ändern Sie sie. Dies hängt von den vorgenommenen Änderungen ab.

Haben Sie in Ihrem Fall die LoadMethod von etwas anderem umbenannt?

hoffe das hilft jemandem da draußen.

Prost!


Navigieren Sie einfach zu Ihrem Main.storyboard-Code, indem Sie mit der rechten Maustaste darauf klicken und die Registerkarte Quellcode auswählen, und entfernen Sie dann den zuvor gespeicherten Eintrag (die Anwendung speichert vorherige Einträge, entfernen Sie einfach diesen).





nsunknownkeyexception