2016-06-12 40 views
0

無法投型 'Google_Books_1.BookTableViewCell' 的值(0x105557600)爲 'NSIndexPath'(0x1061cb438)無法投類型TableViewCell的價值 'NSIndexPath'

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("BookCell", forIndexPath: indexPath) as!BookTableViewCell 
    ... 
} 


func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { 
     // let contact = ContactList![indexPath.row] 
     performSegueWithIdentifier("BookDetailSegue", sender: indexPath) 
    } 
func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { 
     // let contact = ContactList![indexPath.row] 
     performSegueWithIdentifier("BookDetailSegue", sender: indexPath) 
    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "BookDetailSegue" { 
      let vc = segue.destinationViewController as! BookDetailViewController 

      let indexPath = sender as! NSIndexPath 
      vc.book = self.bookList[indexPath.row] **//error is here** 
      vc.index = indexPath.row 
     } 
    } 

如何處理這樣的錯誤?

+0

你確實知道你正在使用2個didDeselectRowAtIndexPath函數嗎?你不是故意使用didSelectRowAtIndexPath嗎? – Devster101

回答

0

聲明變量的實例

var indexPath: NSIndexPath?

然後將所選indexPath像波紋管:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
      // let contact = ContactList![indexPath.row] 
      self.indexPath = indexPath 
      performSegueWithIdentifier("BookDetailSegue", sender: indexPath) 
     } 

現在訪問indexPath這樣的:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
      if segue.identifier == "BookDetailSegue" { 
       let vc = segue.destinationViewController as! BookDetailViewController 

       vc.book = self.bookList[self.indexPath.row!] **//error is here** 
       vc.index = indexPath.row 
      } 
     } 

希望這有助於你。

+0

它不起作用。我猜它不進入功能tableView(tableView:UITableView,didDeselectRowAtIndexPath indexPath:NSIndexPath)方法 – Beibut

+0

嗨,檢查我編輯的答案,並刪除方法didDeSelect,並確保prepareForSegue方法被調用。 – iMuzahid

0

爲什麼不把自己放在你的tableView的indexPathForSelectedRow屬性上呢?

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "BookDetailSegue" { 
     let vc = segue.destinationViewController as! BookDetailViewController 
     if let indexPath = tableView.indexPathForSelectedRow { 
      vc.book = self.bookList[indexPath.row] **//error is here** 
      vc.index = indexPath.row 
     } 
    } 
} 
+0

它的工作原理。非常感謝你。 – Beibut

相關問題