在 Segue 中点击 TableView 单元格返回 Nil
Posted
技术标签:
【中文标题】在 Segue 中点击 TableView 单元格返回 Nil【英文标题】:TableView Cell Tapped Returning Nil in Segue 【发布时间】:2015-10-31 04:10:39 【问题描述】:我正在尝试将表视图信息传递给视图控制器并收到此“致命错误:在展开可选值时意外发现 nil”。这是我的代码.....
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 项目数组。
【问题讨论】:
【参考方案1】:在执行 segue 之前执行 self.resultsTableView.deselectRowAtIndexPath(indexPath, animated: true)
对自己造成了伤害。
取消选择该行后,您将异步执行转场。
当调用prepareForSegue
方法时,resultsTableView.indexPathForSelectedRow
已经是nil
,因为您取消了之前选择的行。
【讨论】:
这完全正确。而且据我所知,异步调用不一定会使值为零,事实是无论如何,不再选择先前选择的行。 好的...这是我从其他地方得到的错误编码,试图解决这个问题。我删除了它,但它仍然为零....有什么想法吗?顺便说一句..我的初始数组是 ----- var videoTitle = [String]() --- 这可能是问题吗? 有什么快速的约定吗?通过指定!您在没有检查的情况下展开选项。对 nil 实施检查,检查 nil 的位置而不是您预期的位置,并重新编写代码以避免这种情况。【参考方案2】:我通过建立一个公共 int 来修复它...
var selectedVideoIndex: Int!
didSelectRowAtIndexPath as..... 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) 与它们相等。如果有更好的方法,请在下方评论。
【讨论】:
以上是关于在 Segue 中点击 TableView 单元格返回 Nil的主要内容,如果未能解决你的问题,请参考以下文章