2016-07-23 67 views
1

這裏是我現在有的代碼:變量nil當試圖傳遞變量到視圖控制器與segue

var valueToPass:String!

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { 
    let indexPath = tableView.indexPathForSelectedRow(); 
    let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell!; 

    valueToPass = currentCell.textLabel.text // valueToPass now equals "test" 
    performSegueWithIdentifier("yourSegueIdentifer", sender: self) 

} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    var viewController = segue.destinationViewController as AnotherViewController 
    viewController.passedValue = valueToPass // valueToPass equals nil here? Why? 
} 

你可以看到,我指定了「測試」 valueToPass在didSelectRowAtIndexPath但在prepareForSegue,valueToPass是零?爲什麼?

+0

是你的tableview與故事板中的segue展開?如果是這種情況,我不確定'tableView:didSelectRowAtIndexPath:'實際上在'prepareForSegue:sender:'之前被調用。您可以通過在兩種方法中刪除斷點並在點擊單元格時首先查看哪些行程中的斷點來進行測試。嘗試保留'prepareForSegue:sender:'不含對其他方法的隱式依賴關係 – markedwardmurray

回答

1

嘗試更換:

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { 
    let indexPath = tableView.indexPathForSelectedRow(); 
    let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell!; 

    valueToPass = currentCell.textLabel.text // valueToPass now equals "test" 
    performSegueWithIdentifier("yourSegueIdentifer", sender: self) 

} 

有了這個:

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { 

    let currentCell = tableView.cellForRowAtIndexPath(indexPath.row) as! UITableViewCell; 

    valueToPass = currentCell.textLabel.text! // valueToPass now equals "test" 
    performSegueWithIdentifier("yourSegueIdentifer", sender: self) 

} 

而且,當你在故事板製作的SEGUE,請確保您沒有從實現代碼如下拖到下一個視圖 - 控制。這是因爲如果你自動執行此操作,那麼執行segue將被稱爲BEFORE didSelectRow ...使其在設置值之前執行segue。只需從託管表視圖的視圖控制器拖動到新視圖。

+0

「另外,當你在storyboard中創建segue時,確保你不會從tableview拖到下一個viewcontroller,這是因爲如果你這樣做自動,然後執行segue將被稱爲BEFORE didSelectRow ...使其在設置值之前執行segue,只需從託管表視圖的視圖控制器拖到新視圖。「 這就是問題所在。非常感謝! – johnniexo88

+0

沒問題:)! – Tob

相關問題