Ios 未捕获异常:此类不符合键值编码
我在跟踪,我在29分钟前后遇到了一个错误。当我尝试在iOS模拟器上运行它时,我收到错误: 由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[setValue:forUndefinedKey:]:此类不符合key-theLoadMethod的键值编码。” 显然,基于这个错误,我认为问题出在我的Ios 未捕获异常:此类不符合键值编码,ios,swift,cocoa-touch,nib,nsunknownkeyexception,Ios,Swift,Cocoa Touch,Nib,Nsunknownkeyexception,我在跟踪,我在29分钟前后遇到了一个错误。当我尝试在iOS模拟器上运行它时,我收到错误: 由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[setValue:forUndefinedKey:]:此类不符合key-theLoadMethod的键值编码。” 显然,基于这个错误,我认为问题出在我的加载方法上。以下是我在ViewController中作为该项目的一部分编写的所有代码: let theDocumentsFolder = NSSearchPathForD
加载方法上。以下是我在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
}
我做错什么了吗?据我所知,我所有的iOS屏幕元素都正确命名和链接 这通常是由于从情节提要到不存在的属性的链接造成的。仔细检查故事板中对象的所有链接。此外,如果更改了属性或方法的名称或拼写,它仍然可以引用旧属性或方法 我也有类似的问题。我更改了用户所需的字段,并重命名了几个字段
我在解析中做了所有必要的更改(删除和添加列)。后端不是问题所在
您的interface builder源代码仍然包含旧属性
要解决此问题,请右键单击main.storyboard->openas->Source Code…查找您删除或重命名的字段…删除或修改它们…这取决于您所做的更改
在您的例子中,您是否从其他名称重命名了LoadMethod
希望这能帮助其他人
干杯 对于那些面临相同问题并已确保IBOutlet正常的用户(至少在Interface Builder中看起来不错):
确保将视图控制器的模块(请参见附图)设置为“当前-$(项目名称)”。
我也遇到了类似的错误。我通过在XCode的设置中将buildlocation更改为Custom来解决这个问题。只需将此字段设置为“相对于工作区”,即可。只需通过右键单击并选择“源代码”选项卡导航到Main.storyboard代码,然后删除存储的上一个条目(应用程序存储上一个条目,只需删除该条目).这通常是由于从情节提要到不存在的属性的链接造成的。仔细检查您的应用程序中对象的所有链接storyboard@Paulw11我该怎么做?只需查看故事板中每个对象名称的名称,并确保它们与我的IBOutlet声明相匹配?选择每个控件、文本字段等,然后在inspector窗口中检查它们的引用输出。@w11。只有6个元素:3个文本字段、2个按钮和1个标签。每个出口看起来都不错。这些按钮被声明为iAction函数,其余的是iBouts…您可以控制或右键单击故事板并作为源代码打开,使用cmd-f搜索LoadMethod。有些东西是指AT属性name@Ronaldoh1非常感谢您提供的提示:“右键单击main.storyboard->openas->Source Code…查找您删除或重命名的字段…删除或修改它们。”这帮助我找到了我从故事板和编码器版本控制器中删除的被诅咒的按钮,但在我读到你的提示之前,仍然让我头疼了一个小时。谢谢。发生在我身上的是,它把所有的渠道都交给了文件的所有者,而不是直接交给文件的来源。我所做的只是作为源代码打开并删除了文件所有者的类名。再次感谢汉克斯,这真是太棒了,对我来说很有用。哇,这可能要花很长时间才能找到,太完美了!谢谢你揭露这件事。已解决我的问题:)可以在project navigator中搜索有问题的出口(在调试器中引用),它将被标记。通过点击旁边的x来删除(而不是通过导航器选择并点击删除按钮)。我也遇到了同样的问题,并且已经修复了,也许这个链接可以帮助其他人,这在复制故事板上的场景/视图并重新链接到其他视图控制器类后也可能发生。您需要查看视图中每个控件的出口,并删除连接检查器中的旧出口。上帝保佑您的出生和未出生的孩子。我在这里尝试了很多次。最后,我创建了一个新的视图和ViewController来替换旧的视图和ViewController,删除了有问题的视图和ViewController,问题得到了解决。我也在这个问题上花了太多时间。听到这个消息我很难过。但到底有什么不起作用呢?此外,答案本身从来没有作为万灵丹出现过。@Rocotilos,如果您的项目中有多个目标,那么模块字段的值应该与包含.xib/.storyboard文件的目标名称的值相同。起初我认为这个答案不起作用,但刚发现我必须“刷新”类(通过重新输入类名),这将占位符文本添加到模块字段中。谢谢!您正在谈论文件的所有者,对吗?我再次键入类名,但模块仍然显示:“无”+1来解决我的问题。这让我恼火了好几个小时。为什么新添加的视图控制器的默认值是“无”,我永远猜不到是否会发生这种情况。谢谢!这才是真正有效的!我来自程序员背景(C++,Python,Java,…)虽然我喜欢所有漂亮的UI功能,比如从故事体拖动到代码,但我感到不安,因为我真的不知道幕后发生了什么。