簡體   English   中英

在prepareForSegue()之前調用了兩次的segue.destinationViewController的viewDidLoad()

[英]viewDidLoad() of segue.destinationViewController called twice before prepareForSegue()

所以我想做的是通過didSelectRowAtIndexPath中的prepareForSegue方法的sender參數從tableViewController將對象發送到collectionViewController,但是由於某種原因,該collectionViewController的viewDidLoad方法在prepareForSegue之前被調用了兩次。 這是tableViewController中的相關代碼:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let challenge = dataModel.challenges[indexPath.row]
    performSegueWithIdentifier("ShowChallengeSegue", sender: challenge)
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    ...
    else if segue.identifier == "ShowChallengeSegue" {
        let controller = segue.destinationViewController as! ChallengeViewController
        controller.challenge = sender as! Challenge
    }
}

添加一堆打印語句后,依次發生以下情況:

  1. tableViewController的didSelectRowAtIndexPath被調用
  2. destinationViewController的(collectionViewController)viewDidLoad被調用
  3. 再次調用destinationViewController的(collectionViewController)viewDidLoad
  4. tableViewController的prepareForSegue被調用

我不知道為什么會這樣,不勝感激。

編輯 -我用tableViewController替換了collectionViewController,並且看起來一切正常,因此可能與UICollectionViewController有關。

您必須從單元而不是整個控制器那里獲取了segue,以便兩次執行segue

請從控制器中獲取密碼,然后嘗試

要么

添加此代碼

override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool {
    return false;
}

@格沃齊·索科洛夫斯基

在情節提要中檢查您的xib文件。 我認為您從按鈕或任何其他視圖鏈接了segue。 應該使用UIViewcontroller設置segue,然后可以調用performSegueWithIdentifier

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM