我跟随a tutorial titled "Swift Tutorial for iOS : NSFileManager Persisting Data",我在29分钟左右或之后遇到了错误。当我尝试在iOS模拟器上运行它时,我收到错误:
由于未捕获的异常而终止应用程序&#39; NSUnknownKeyException&#39;,原因:&#39; [setValue:forUndefinedKey:]:此类与密钥theLoadMethod不符合密钥值编码。&#39; < / p>
显然,根据错误,我认为问题是我的theLoadMethod
。这是 all 我在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屏幕元素都已正确命名和链接。
答案 0 :(得分:117)
这通常是由故事板到不存在的属性的链接引起的。仔细检查故事板中对象的所有链接。此外,如果您更改了属性或方法的名称或拼写,它仍然可以引用旧属性或方法。
答案 1 :(得分:60)
对于那些面临同样问题并且已经确保IBOutlets正常的人(至少在Interface Builder中看起来很好): 确保您的视图控制器设置为“当前 - $(PROJECT_NAME)”模块(请参阅附图)。
答案 2 :(得分:20)
我遇到了类似的问题。我更改了用户所需的字段并重命名了几个字段。
我在解析(删除和添加列)中进行了所有必要的更改。后端不是问题。
您的界面构建器源代码仍包含旧属性。
要解决右键单击main.storyboard - &gt;打开为 - &gt;源代码....查找您删除或重命名的字段...删除或修改它们...这取决于您所做的更改。
在你的情况下你是否从其他地方重命名了TheLoadMethod?
希望这可以帮助那里的人。
干杯!
答案 3 :(得分:3)
通过右键单击并选择源代码选项卡,然后删除存储的上一个条目(应用程序存储以前的条目,只删除它),只需导航到Main.storyboard代码。
答案 4 :(得分:0)
我也遇到了类似的错误。我通过在更新后在XCode的设置中将Build Location更改为Custom来解决了这个问题。只需将此字段设置为“相对于工作区&#39;那就是它。