首页 文章

Swift:由于未捕获的异常终止应用'NSInvalidArgumentException',原因:'Entity name must not be nil.'

提问于
浏览
0

我正在尝试使用我现有的swift项目实现CoreData . 我跟着this tutorial并用UITableView实现它 .

当我获取数据模型记录(在另一个视图控制器中)时,数据会有争议地添加到数据模型(来自另一个视图控制器) .

Problem

使用UITableView导航到View Controller,一次显示数据模型中的数据 . 点击tableView或向上或向下滑动导致应用程序崩溃并出现错误

由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:'实体名称不能为零 .

Function for saving record :

func saveData(date: String, usr : String, piid: String, healthD:String, temp:String, humd:String) {
        //1
        let managedContext = DataController().managedObjectContext

        //2
        let entity =  NSEntityDescription.entityForName("Hygeine",
            inManagedObjectContext:managedContext)

        let health = NSManagedObject(entity: entity!,
            insertIntoManagedObjectContext: managedContext)

        //3
        health.setValue(date, forKey: "date")
        health.setValue(healthD, forKey: "health")
        health.setValue(temp, forKey: "temp")
        health.setValue(humd, forKey: "humd")
        health.setValue(piid, forKey: "pi_id")
        health.setValue(usr, forKey: "usr")
        //4
        do {
            try managedContext.save()
            //5
            healthData.append(health)
        } catch let error as NSError  {
            print("Could not save \(error), \(error.userInfo)")
        }
    }

ViewWillAppear for ViewController with UITableView :

override func viewWillAppear(animated: Bool) {

        let managedContext = DataController().managedObjectContext

        //2
        let fetchRequest = NSFetchRequest(entityName: "Hygeine")

        //3
        do {
            let results =
            try managedContext.executeFetchRequest(fetchRequest)
            healthData = results as! [NSManagedObject]
        } catch let error as NSError {
            print("Could not fetch \(error), \(error.userInfo)")
        }
    }

这个问题有很多Objective-C解决方案但是如何在Swift 2中解决它 . 我在这里做错了什么?

1 回答

  • 1

    entityForName 返回一个强制解包的可选项 . 这很可能是您的错误,很容易陷入调试器中 .

    您的实体名称输入错误了吗?根据您的型号进行检查 .

    正如其他人所说,学习 NSFetchedResultsController ,虽然它不能解决这个错误,但在处理 UITableViewController 时更容易使用 .

相关问题