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) 在那里相等。如果有更好的方法请在下方留言。
我正在尝试将 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) 在那里相等。如果有更好的方法请在下方留言。