我尝试学习核心数据,这是完全基本的。不幸的是这个错误抛出
由于未捕获的异常终止应用程序' NSUnknownKeyException',原因:' [setValue:forUndefinedKey:]:此类不是密钥标题的密钥值编码兼容。
所以此时app终止。
以NSException类型的未捕获异常终止
我该怎么办?我错过了什么,谢谢
以下是viewcontroller中的代码
@IBAction func createMangeObjectBtn(sender: AnyObject) {
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let context = appDelegate.managedObjectContext
let entityForName = NSEntityDescription.entityForName("Book", inManagedObjectContext: context)
entityForName?.setValue("iOS Programming", forKey: "title")
entityForName?.setValue("12/12/12", forKey: "publishDate")
entityForName?.setValue("NH001", forKey: "code")
entityForName?.setValue("tolight", forKey: "author")
do{
try context.save()
print("saved")
}
catch{
print("something happend")
}
}
答案 0 :(得分:3)
您的代码
let entityForName = NSEntityDescription.entityForName("Book", inManagedObjectContext: context)
创建NSEntityDescription
而不是该实体的对象。
你想要的是
let book = NSEntityDescription.insertNewObjectForEntityForName("Book", inManagedObjectContext: context)
book.setValue("iOS Programming", forKey: "title")
// ...
或者更好的是,为实体创建一个NSManagedObject
子类
并直接使用属性访问器:
let book = NSEntityDescription.insertNewObjectForEntityForName("Book", inManagedObjectContext: context)
book.title = "iOS Programming"
// ...
答案 1 :(得分:0)
您在这里创建的NSEntityDescription
不是NSManagedObject
。实体描述描述了数据库条目字段和类型。它本身不是数据库条目。
class func entity(forEntityName entityName: String, in context: NSManagedObjectContext) -> NSEntityDescription?
要在数据库中创建Book
即1条记录的实例,您需要获取该描述并将其传递给init方法
init(entity: NSEntityDescription, insertInto: NSManagedObjectContext?)
所以
let newBook = NSManagedObject(entityForName,insertInto:context)