应用程序崩溃,因为 - “类不符合键的键值编码”
Posted
技术标签:
【中文标题】应用程序崩溃,因为 - “类不符合键的键值编码”【英文标题】:App crashes because - "Class is not key value coding-compliant for the key" 【发布时间】:2015-02-19 19:28:48 【问题描述】:每次我去 VieController3 时我的应用程序都会崩溃,我不知道为什么/如何解决问题。
http://img3.fotos-hochladen.net/uploads/bildschirmfoto6cji4t9fp1.png
由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[setValue:forUndefinedKey:]:此类不符合键值编码的键 tableView。”
import UIKit
import CoreData
class ViewController3: UIViewController, UITableViewDataSource
var people = [NSManagedObject]()
@IBOutlet weak var tableView: UITableView!
func tableView(tableView: UITableView,
numberOfRowsInSection section: Int) -> Int
return people.count
func tableView(tableView: UITableView,
cellForRowAtIndexPath
indexPath: NSIndexPath) -> UITableViewCell
let cell =
tableView.dequeueReusableCellWithIdentifier("Cell")
as UITableViewCell
let person = people[indexPath.row]
cell.textLabel!.text = person.valueForKey("name") as String?
return cell
@IBAction func addExercise(sender: AnyObject)
var alert = UIAlertController(title: "New exercise",
message: "Add a new exercise",
preferredStyle: .Alert)
let saveAction = UIAlertAction(title: "Save",
style: .Default) (action: UIAlertAction!) -> Void in
let textField = alert.textFields![0] as UITextField
self.saveName(textField.text)
self.tableView.reloadData()
let cancelAction = UIAlertAction(title: "Cancel",
style: .Default) (action: UIAlertAction!) -> Void in
alert.addTextFieldWithConfigurationHandler
(textField: UITextField!) -> Void in
alert.addAction(saveAction)
alert.addAction(cancelAction)
presentViewController(alert,
animated: true,
completion: nil)
func saveName(name: String)
//1
let appDelegate =
UIApplication.sharedApplication().delegate as AppDelegate
let managedContext = appDelegate.managedObjectContext!
//2
let entity = NSEntityDescription.entityForName("Person",
inManagedObjectContext:
managedContext)
let person = NSManagedObject(entity: entity!,
insertIntoManagedObjectContext:managedContext)
//3
person.setValue(name, forKey: "name")
//4
var error: NSError?
if !managedContext.save(&error)
println("Could not save \(error), \(error?.userInfo)")
//5
people.append(person)
override func viewDidLoad()
super.viewDidLoad()
title = "\"Edit your Exercises\""
tableView.registerClass(UITableViewCell.self,
forCellReuseIdentifier: "Cell")
override func viewWillAppear(animated: Bool)
super.viewWillAppear(animated)
//1
let appDelegate =
UIApplication.sharedApplication().delegate as AppDelegate
let managedContext = appDelegate.managedObjectContext!
//2
let fetchRequest = NSFetchRequest(entityName:"Person")
//3
var error: NSError?
let fetchedResults =
managedContext.executeFetchRequest(fetchRequest,
error: &error) as [NSManagedObject]?
if let results = fetchedResults
people = results
else
println("Could not fetch \(error), \(error!.userInfo)")
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
【问题讨论】:
检查 .xib 或故事板文件中的出口和操作。 检查了两次 - 我创建了一个 Outlet (tableView) 和一个 Action (Button) 并选择 ViewController 作为 tableView 的数据源 为什么在异常信息中省略了类名???当您调用addExercise
时,这会告诉您真正存在什么类。
你能告诉我如何正确吗?
添加完整的错误信息,不要删除中间的文字或者至少解释你为什么这样做。
【参考方案1】:
最新的截图显示了之前的另一个错误,这可能是导致它下面的错误。
Unknown class ViewController3 in InterfaceBuilder
对我来说,这表明您尝试在 ViewController 上设置一个类,但该类输入错误。您是否创建了一个继承 UIViewController
的类 ViewController3
?
因此,ViewController 默认使用默认的UIViewController
,而UIViewController
没有属性tableView
,所以它会崩溃。
希望对您有所帮助。
【讨论】:
以上是关于应用程序崩溃,因为 - “类不符合键的键值编码”的主要内容,如果未能解决你的问题,请参考以下文章