TableView Cell Tapped 在 Segue 中返回 Nil

TableView Cell Tapped Returning Nil in Segue

我正在尝试将 table 视图信息传递给视图控制器并正在获取此 "fatal error: unexpectedly found nil while unwrapping an Optional value"。这是我的代码.....

  func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
    {
        self.resultsTableView.deselectRowAtIndexPath(indexPath, animated: true)

        dispatch_async(dispatch_get_main_queue()) { () -> Void in
            self.performSegueWithIdentifier("playerSegue", sender: self.resultsTableView)
        }

    }

和...

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
    if segue.identifier == "playerSegue"
    {
        let index = resultsTableView.indexPathForSelectedRow!.row
        let controller = segue.destinationViewController as! VideoViewController
        controller.vidTitleLBL.text = self.videoTitle[index]
        controller.videoId = self.videoId[index]

    }
}

indexPath.row 没有显示信息。此外,该单元格是自定义 UITableViewCell,videoTitle 和 videoId 来自 YouTube JSON 项数组。

你在执行 segue 之前 self.resultsTableView.deselectRowAtIndexPath(indexPath, animated: true) 伤害了自己。

取消选择该行后,您将异步执行 segue。 当调用 prepareForSegue 方法时,resultsTableView.indexPathForSelectedRow 已经是 nil,因为您取消了先前选择的行。

我通过建立 public int 修复了它...

var selectedVideoIndex: Int!

didSelectRowAtIndexPath 作为..... func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    selectedVideoIndex = indexPath.row
    dispatch_async(dispatch_get_main_queue(), {
        self.performSegueWithIdentifier("seguePlayer", sender: self)

    })

}

并 prepareForSegue 作为...

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
    {
        if segue.identifier == "seguePlayer"
        {

            print(self.videoTitle[selectedVideoIndex])
            print(self.videoId[selectedVideoIndex])
            let controller = segue.destinationViewController as! VideoViewController
            controller.vidTitleText = self.videoTitle[selectedVideoIndex]
            controller.videoId = self.videoId[selectedVideoIndex]
            controller.vidDescription = self.videoDescription[selectedVideoIndex]
            controller.vidIMG = self.videoIMG[selectedVideoIndex]

        }
    }

此外,由于我来自 YouTube API 字典的信息被作为字符串丢弃,我不得不在我的 VideoViewController 中建立空字符串并使我的 label.text(s) 在那里相等。如果有更好的方法请在下方留言。