Swift:Segue调用时出错



我的swift类中有一个名为ViewController的segue设置,我从表中调用View didSelectRowAtIndexPath。我正在我的segue 中使用此代码

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
        var svc = segue!.destinationViewController as Homework;
       svc.subject = subject_name
}

告诉它将一个名为subject的变量(像这样声明var subject:NSString!)设置为名为subject_name的变量。然后,我使用以下代码prepareForSegue(UIStoryboardSegue(), sender: AnyObject?())从表View didSelectRowAtIndexPath中调用它。

这是我的didSelectRowAtIndex

     func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
        println("You selected cell #(indexPath.row)!")
        let indexPath = tableView.indexPathForSelectedRow();
        var currentCell = tableView.cellForRowAtIndexPath(indexPath) as UITableViewCell
        println(currentCell.textLabel!.text)
        subject_name = currentCell.textLabel.text
//        // Showing new storyboard
        performSegueWithIdentifier("Homework", sender: self)
        let vc : AnyObject! = self.storyboard.instantiateViewControllerWithIdentifier("Homework")
        self.showViewController(vc as UIViewController, sender: vc)
    }

但当我运行该应用程序并单击表视图单元格时,我会收到以下错误:"致命错误:在打开可选值时意外发现nil",绿色箭头指向var svc = segue!.destinationViewController as Homework;。我在另一个应用程序上测试了完全相同的代码,除了点击按钮时调用segue,效果非常好,我还尝试了Swift中的Calling segue programally not working和Preparing for segue in embedded tableView中的答案。这两个答案都不起作用。

如果我理解正确,那么您正在调用prepareForSegue()。你不应该,这是自动调用的。

您应该调用performSegueWithIdentifier(identifier: String, sender: AnyObject?)。这会触发一个segue调用,该调用会自动执行prepareForSegue()

identifier参数是您在IB中设置的参数:选择segue并查看属性检查器。

除此之外,@AnthonyKong的答案是一种更安全的处理选项(在本例中为segue)的方法,可以确保不会引发运行时异常。

附录查看您的最新问题,特别是didSelectRowAtIndexPath的实施情况。最后2行:

let vc : AnyObject! = self.storyboard.instantiateViewControllerWithIdentifier("Homework")
self.showViewController(vc as UIViewController, sender: vc)

是冗余的——如果执行segue,它将实例化目标视图控制器,因此不必手动执行。拆下这些管路。

您应该这样做:

if let svc = segue!.destinationViewController as? Homework {
       svc.subject = subject_name
}

这是因为你可能会通过其他没有作业作为设计VC 的分段

相关内容

最新更新