将segue从UITableViewCell推送到Swift中的ViewController

Jac*_*ack 11 iphone uitableview ios uistoryboardsegue swift

我遇到了UITableViewCells的问题.我将我的UITableView连接到API以填充我的单元格.

然后我创建了一个函数来抓取数据,indexPath.row以识别应该发送到的数组中的哪个JSON对象RestaurantViewController.

链接到我的Xcode项目,以便于调试和解决问题

以下是我的小片段如何将"行点击"设置为全局变量.

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
     i = indexPath.row
}
Run Code Online (Sandbox Code Playgroud)

这是我的prepareForSegue()功能,应该把我的push-segue挂钩到RestaurantViewController.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if segue.identifier == "toRestaurant"{
    let navigationController = segue.destinationViewController as UINavigationController
    let vc = navigationController.topViewController as RestaurantViewController
    vc.data = currentResponse[i] as NSArray
 }
}
Run Code Online (Sandbox Code Playgroud)

这就是我如何设置我的segue UITableViewCell

这是我的结果,我试图点击这些单元格中的每一个但我不会被推到另一个viewController ...我也没有得到错误.这有什么不对?

尝试过无法解决的解决方案

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
        if segue.identifier == "toRestaurant"{
            let vc = segue.destinationViewController as RestaurantViewController
            //let vc = navigationController.topViewController as RestaurantViewController
            vc.data = currentResponse[i] as NSArray
        }
    }
Run Code Online (Sandbox Code Playgroud)

erg*_*oon 20

问题是您没有正确处理数据.如果你查看你的currentResponse数组,你会看到它包含NSDictionaries,但在prepareForSegue你尝试将NSDictionary转换为NSArray时,会导致应用程序崩溃.

data变量更改RestaurantViewController为NSDictionary并更改prepareForSegue为传递NSDictionary

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if let cell = sender as? UITableViewCell {
        let i = redditListTableView.indexPathForCell(cell)!.row
        if segue.identifier == "toRestaurant" {
            let vc = segue.destinationViewController as RestaurantViewController
            vc.data = currentResponse[i] as NSDictionary
        }
    }
}
Run Code Online (Sandbox Code Playgroud)