用Segue传递整数

时间:2017-05-26 18:54:49

标签: ios swift swift3 segue

尝试将数据发送到新的viewController时遇到问题。 该行执行

destination1.path = path

因为我获得了新ViewController的路径,所以整数似乎有些问题。

我收到以下错误消息:

  

2017-05-26 20:37:14.442509 + 0200订阅[1224:301622] UIView:0x105d294f0; frame =(0 0; 414 736); autoresize = W + H; layer = CALayer:0x17403f360>>的窗口不等于Subscription.ViewController2:0x105d3fcb0>的视图窗口!

// method to run when table view cell is tapped
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    print("You tapped cell number \(indexPath.row).")

    let index = indexPath.row
    performSegue(withIdentifier: "EditSegue1", sender: index)


}
@IBAction func backButton(_ sender: Any) {
     self.dismiss(animated: true, completion: nil)
}

// Prepare for next view.
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if let destination1 = segue.destination as? ViewController2 {

        destination1.path = path

        if let index = sender as? Int {
            destination1.index = index
        }
    }
}

我的第二个viewController。

var path = ""
var index = 0


override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.

    print(path)
    print(index)
}

1 个答案:

答案 0 :(得分:1)

这里有一些问题:发件人应该是触发事件的对象。在大多数情况下,但不是全部,它应该是self

第二个是你没有检查你的segue标识符。 prepareForSegue调用内的所有内容都应该包含在if(segue.identifier ==)`块中。

第三,路径似乎没有在您显示的函数中声明,因此除非它出现在其他地方,否则可能会导致意外行为。

第四,因为你试图将发送者用作int,所以它会把事情搞砸。我假设你有一个声明路径的属性。您可能还应该为索引声明一个,并传递它而不是尝试使用sender。然后,您也不必将其包装在类型检查中。

您可能还会看到一个问题,因为您没有在第二个视图控制器上声明路径和索引的类型。您可能需要,以便第一个视图控制器知道允许分配哪些类型。