我想用我現有的swift項目來實現CoreData。我遵循this tutorial並使用UITableView實現它。Swift:由於未捕獲異常'NSInvalidArgumentException'而終止應用程序,原因:'實體名稱不能爲零'。
當我正在獲取數據模型記錄(在另一個視圖控制器中)時,數據被有爭議地添加到數據模型(從另一個視圖控制器)。
問題
導航到視圖控制器與UITableView的,示出了一次從數據模型數據。輕敲的tableView或滑動,向上或向下導致應用程序錯誤
終止應用程序崩潰是由於未捕獲的異常「NSInvalidArgumentException」,原因:「實體名稱不能是零」
保存記錄功能:
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中的視圖控制器具有的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中解決它。我在這裏做錯了什麼?
你有沒有考慮過使用NSFetchedResults控制器及其代表而不是數組?這將解決你的問題,我相信:) –
你可以建議我一個教程,因爲我是新的iOS開發? @SandeepBhandari –
四年前我經歷了這個教程:)所以它是在目標c :) https://www.raywenderlich.com/999/core-data-tutorial-for-ios-how-to-use- nsfetchedresultscontroller看看它很好解釋:)在swift中的大多數方法是相同的:)所以不應該是任何問題,以應付:) –