由于未捕获的异常终止应用程序&#39; NSUnknownKeyException&#39;,原因:&#39; [<nsentitydescription 0x7fc863f27230 =“”> setValue:forUndefinedKey:]

时间:2016-10-11 07:45:23

标签: ios swift core-data

我尝试学习核心数据,这是完全基本的。不幸的是这个错误抛出

  

由于未捕获的异常终止应用程序&#39; NSUnknownKeyException&#39;,原因:&#39; [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")
        }

    }

这是模型: enter image description here

2 个答案:

答案 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)

相关问题