我正在尝试使用我现有的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 回答
entityForName
返回一个强制解包的可选项 . 这很可能是您的错误,很容易陷入调试器中 .您的实体名称输入错误了吗?根据您的型号进行检查 .
正如其他人所说,学习
NSFetchedResultsController
,虽然它不能解决这个错误,但在处理UITableViewController
时更容易使用 .