2015-07-10 119 views
0

我有2個數組。所有車輛之一,其他一輛是過濾的車輛。 filteredVehicles通過搜索欄動態生成,並且運行良好。但是我不能爲下一個場景動態地繼續。UitableView和Segue搜索欄

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     self.performSegueWithIdentifier("DisplayViewSegue", sender: tableView) 
    } 

// In a storyboard-based application, you will often want to do a little preparation before navigation 
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "DisplayViewSegue" { 
      let nextScene = segue.destinationViewController as! DisplayViewController 


      if sender as! UITableView == self.searchDisplayController!.searchResultsTableView { 
       let indexPath = self.searchDisplayController!.searchResultsTableView.indexPathForSelectedRow()! 
       let selectedVehicle = self.filteredVehicles[indexPath.row] 
       nextScene.currentVehicle = selectedVehicle 
      } else { 
       let indexPath = self.tableView.indexPathForSelectedRow()! 
       let selectedVehicle = self.vehicles[indexPath.row] 
       nextScene.currentVehicle = selectedVehicle 
      } 


     } 
    } 

這些都是我該做相關的SEGUE方法。當我點擊任何表列表對象應用的經紀和獲得這種類型的錯誤:

Could not cast value of type 'UITableViewCell' (0x10757f9f0) to 'UITableView' (0x10757a810). (lldb)

回答

1

我相信你已經設置了賽格瑞在你的故事板從表視圖單元格您下一個場景。通過這樣做,您的segue會自動執行,並且您無需致電self.performSegueWithIdentifier("DisplayViewSegue", sender: tableView)

問題當然是發件人是表格視圖單元格而不是表格視圖,因爲您願意。你有兩個選擇:

  1. 刪除您didSelectRowAtIndexPath的內容,裏面prepareForSegue,獲取對錶的引用查看一些其他的方式。
  2. 通過將segue更改爲源自視圖控制器本身而非表格視圖單元格來更新您的故事板。這將使您可以在didSelectRowAtIndexPath方法內撥打performSegueWithIdentifier
0

貌似發件人是您按下所以表視圖單元格,你不應該在這裏做強制轉換。 (通常這是避免使用as的好習慣)

我會建議把邏輯的車輛選在didSelectRowAtIndexPath。假設你有一個叫Vehicle像類型會的工作:

var selectedVehicle: Vehicle? 
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    if tableView == searchDisplayController?.searchResultsTableView { 
     selectedVehicle = filteredVehicles[indexPath.row] 
    } else { 
     selectedVehicle = vehicles[indexPath.row] 
    } 
    self.performSegueWithIdentifier("DisplayViewSegue", sender: tableView) 
} 

這可以簡化您的prepareForSegue實現

// In a storyboard-based application, you will often want to do a little preparation before navigation 
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "DisplayViewSegue" { 
     if let nextScene = segue.destinationViewController as? DisplayViewController { 
      nextScene.currentVehicle = selectedVehicle 
     } 
    } 
}