2016-12-30 60 views
0

我目前正在嘗試使用核心數據來獲取項目並將其添加到我的UITableView。抓取和添加項目工作正常。但是,問題是數據什麼都沒有,我的讀取結果是「致命錯誤:在解包可選值時意外發現零」,這是有道理的,因爲我在數據庫中沒有任何東西。但是,我不想崩潰,我想捕捉錯誤併產生一個UIAlert錯誤消息,而不是崩潰。但我目前的代碼似乎不工作。獲取核心數據導致錯誤的無項目

func fetch() { 
     let itemsFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "Items") 

     do { 
      let fetchedItem = try moc.fetch(itemsFetch) as! [Items] 
      self.itemsName.append(fetchedItem.first!.name!) 
      self.itemDate.append(fetchedItem.first!.date!) 
      self.tableView.reloadData() 

      //print(fetchedItem.first!.name!) 
      //print(fetchedItem.first!.date!) 
     } catch { 
      //I thought this statement would catch the error, but it 
      // is not doing that 
      print("Hello") 
      fatalError("Bad things happened \(error)") 
     } 
    } 

更新 - 我已經更新了代碼來檢查爲零,但是,我得到:Initialiser for conditional binding must have optional type not NSFetchRequest。不知道如何解決。

func fetch() { 
     if let itemsFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "Items") { 

      do{ 
       let fetchedItem = try moc.fetch(itemsFetch) as! [Items] 
       self.itemsName.append(fetchedItem.first!.name!) 
       self.itemDate.append(fetchedItem.first!.date!) 
       self.tableView.reloadData() 

       //print(fetchedItem.first!.name!) 
       //print(fetchedItem.first!.date!) 
      } catch { 
       print("Hello") 
       fatalError("Bad things happened \(error)") 
      } 
     } else { 
      print("Checked") 
     } 
    } 
+0

把此行中,如果條件一樣,如果讓itemsFetch = NSFetchRequest (的entityName: 「項目」){} –

+0

檢查'nil'訪問之前,不像java swift不會拋出'NullPointerException' –

+0

@HimanshuMoradiya當我嘗試這種方法,我得到2錯誤,使用未解決的標識符'itemsFetch'和條件綁定的初始化必須有可選類型,而不是NSFetchRequest –

回答

0

您還可以使用

if !(itemsFetch.isEmpty){ 
} 
else{ 
print("error") 
} 
0

好吧所以我找到了一個解決方案。這個問題來自do聲明。以下是如何解決它。

let itemsFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "Items") 

     do{ 
      let fetchedItem = try moc.fetch(itemsFetch) as! [Items] 
      if fetchedItem.count == 0{ 
       // Since i casted it to an array of items (my entity), 
       // I can check whether there are no data by checking 
       // if the length of the array is 0 
       print("Checked") 
      } 
      else{ 
       self.itemsName.append(fetchedItem.first!.name!) 
       self.itemDate.append(fetchedItem.first!.date!) 
       self.tableView.reloadData() 

      } 

       //print(fetchedItem.first!.name!) 
       //print(fetchedItem.first!.date!) 
     } catch { 
      print("Hello") 
      fatalError("Bad things happened \(error)") 
     }