尝试将数据发送到新的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)
}
答案 0 :(得分:1)
这里有一些问题:发件人应该是触发事件的对象。在大多数情况下,但不是全部,它应该是self
。
第二个是你没有检查你的segue标识符。 prepareForSegue
调用内的所有内容都应该包含在if(segue.identifier ==)`块中。
第三,路径似乎没有在您显示的函数中声明,因此除非它出现在其他地方,否则可能会导致意外行为。
第四,因为你试图将发送者用作int,所以它会把事情搞砸。我假设你有一个声明路径的属性。您可能还应该为索引声明一个,并传递它而不是尝试使用sender。然后,您也不必将其包装在类型检查中。
您可能还会看到一个问题,因为您没有在第二个视图控制器上声明路径和索引的类型。您可能需要,以便第一个视图控制器知道允许分配哪些类型。