2016-04-21 32 views
0

我想用我現有的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中解決它。我在這裏做錯了什麼?

+1

你有沒有考慮過使用NSFetchedResults控制器及其代表而不是數組?這將解決你的問題,我相信:) –

+0

你可以建議我一個教程,因爲我是新的iOS開發? @SandeepBhandari –

+0

四年前我經歷了這個教程:)所以它是在目標c :) https://www.raywenderlich.com/999/core-data-tutorial-for-ios-how-to-use- nsfetchedresultscontroller看看它很好解釋:)在swift中的大多數方法是相同的:)所以不應該是任何問題,以應付:) –

回答

1

entityForName返回您正在強制解包的可選項。這很可能是你的錯誤,很容易陷入調試器中。

您的實體名稱輸入錯誤?根據你的模型檢查它。

正如其他人所說,學習NSFetchedResultsController,雖然它不會解決這個錯誤,但處理UITableViewController時更容易處理。

+0

實體名稱是正確的。 NSFetchedResultsController幫助在添加新數據對象時更新UITableView。謝謝! –

相關問題