未捕获的异常:此类不符合键值编码

Rea*_*ues 56 cocoa-touch nib ios swift nsunknownkeyexception

我正在按照标题为"iOS的Swift教程:NSFileManager持久数据"的教程,我在29分钟左右或之后遇到错误.当我尝试在iOS模拟器上运行它时,我收到错误:

由于未捕获的异常'NSUnknownKeyException'而终止应用程序,原因:'[setValue:forUndefinedKey:]:此类不是密钥值的编码 - 与密钥theLoadMethod兼容.

显然基于错误,我认为问题是我的theLoadMethod.以下是我在ViewController中作为此项目的一部分编写的所有代码:

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
}
Run Code Online (Sandbox Code Playgroud)

有什么我做错了吗?据我所知,我的所有iOS屏幕元素都被正确命名和链接.

Pau*_*w11 116

这通常是由故事板到不存在的属性的链接引起的.仔细检查故事板中对象的所有链接.此外,如果您更改了属性或方法的名称或拼写,它仍然可以引用旧属性或方法.

  • 可以在项目导航器中搜索有问题的插座(在调试器中引用),它将被标记.通过点击旁边的x来删除(不是通过导航器选择并点击删除按钮). (9认同)
  • http://www.tech-recipes.com/rx/52021/how-do-i-fix-the-issue-this-class-is-not-key-value-coding-compliant-for-the-key- in-xcode-6/i有同样的问题已经修复,也许这个链接也可以帮助其他人 (8认同)
  • 主保佑你的出生和未出生的孩子. (2认同)

Art*_*yan 60

对于那些面临同样问题并且已经确保IBOutlets正常的人(至少在Interface Builder中看起来很好):确保你的视图控制器的模块(参见附图)设置为"Current - $ (项目名)". 在此输入图像描述

  • 很伤心.但究竟什么不起作用?而且,答案本身从未被视为万灵药. (4认同)
  • @Rocotilos,如果项目中有多个目标,则模块字段应与包含.xib/.storyboard文件的目标名称具有相同的值. (2认同)

Ron*_*oh1 20

我遇到了类似的问题.我更改了用户所需的字段并重命名了几个字段.

我在解析(删除和添加列)中进行了所有必要的更改.后端不是问题.

您的界面构建器源代码仍包含旧属性.

要解决右键单击main.storyboard - >打开为 - >源代码....查找您删除或重命名的字段...删除或修改它们...这取决于您所做的更改.

在你的情况下你是否从其他东西重命名了LoadLethod?

希望这有助于那里的人.

干杯!

  • 谢谢.发生在我身上的是,它正在向文件所有者而不是直接向源提供任何出口.我所做的只是作为源打开并删除了文件所有者的类名.再次感谢 (2认同)