2017-05-26 60 views
0

嘗試將數據發送到新的viewController時遇到問題。 該行執行Segue傳遞整數

destination1.path = path 

因爲我得到的路徑,新的ViewController,似乎是有些問題的整數。

我得到這個錯誤消息:

2017年5月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

發件人永遠不會是一個整數。我想你想要的是'sender.tag as? Int' –

+0

我認爲錯誤不在Int值中,因爲這段代碼不應該崩潰。我認爲這是你的東西UI –

+1

你不應該手動準備prepareForSegue:sender:'。一旦啓動故事板,就會自動調用它 –

回答

1

這裏有幾個問題:發件人應該是觸發事件的對象。在大多數情況下,但不是全部,它應該是self

第二個是你沒有檢查你的segue標識符。你的prepareForSegue調用中的所有東西都應該包含在if(segue.identifier ==)塊中。

第三,路徑似乎沒有在您展示的函數中聲明,所以除非它出現在其他地方,否則可能會導致意外行爲。

第四,由於您試圖將發件人作爲int使用,因此它會拋出異常。我假設你有一個聲明路徑的屬性。你應該也可以聲明一個索引,並通過它而不是試圖使用發件人。您也不必將其包裝在類型檢查中。

由於您未在第二個視圖控制器上聲明路徑和索引的類型,因此您也可能會看到問題。您可能需要爲了使第一個視圖控制器知道允許分配哪些類型。