2016-10-03 21 views
0

我想從一個視圖控制器移動到另一個,併發送用戶名:點擊我得到斯威夫特賽格瑞準備 - 從一個視圖控制器將數據發送到另一個

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 
    self.performSegueWithIdentifier("chosenPerson", sender: self) 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if segue.identifier == "chosenPerson" { 

     let chosenPerson = segue.destinationViewController as? chosenPersonViewController 
     let indexPaths = self.collectionView!.indexPathsForSelectedItems()! 
     let indexPath = indexPaths[0] as NSIndexPath 

     chosenPerson!.userID = self.usersArray[indexPath.row].userId 

    } 

:「致命錯誤:意外發現零,而展開一個可選值「 我做錯了什麼?

+0

哪一行運行中斷? –

+0

只需幾個指示即可開始。嘗試逐行瀏覽你的'if語句'中的行,以瞭解正在發生的事情。潛在的失敗候選者是'self.collectionView!.indexPathsForSelectedItems()!'和'chosenPerson!.userID = self.usersArray [indexPath.row] .userId'因此試圖證明'indexPathsForSelectedItems()'返回一些有用的東西,並且你的位置'indexPath.row'上的usersArray實際上包含了一些東西。 – pbodsk

+0

chosenPerson!.userID = self.usersArray [indexPath.row] .userId - 致命錯誤 –

回答

0

執行segue時,請將indexPath作爲發件人並嘗試使用此switch語句。如果在選擇單元格時看到"unknown segue"打印出來,則目標控制器的類型不是chosenPersonViewController

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 

    performSegueWithIdentifier("chosenPerson", sender: indexPath) 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    switch (segue.destinationViewController, sender) { 
    case (let controller as chosenPersonViewController, let indexPath as NSIndexPath): 
     controller.userID = usersArray[indexPath.row].userId 
    default: 
     print("unknown segue") 
     break 
    } 
} 
0

一個可能的問題可能是您的故事板中沒有將您的segue的標識符設置爲「chosenPerson」。要解決這個問題,首先確保你的第一個和第二個視圖控制器之間有一個segue,它可以通過控件從一個視圖控制器拖動到另一個視圖控制器來創建。

然後確保segue具有標識符,具體爲:「chosenPerson」。要做到這一點:單擊前兩個視圖控制器之間的segue,然後導航到屬性選項卡,然後將標識符框設置爲「chosenPerson」。將故事板保存到您的更改中,現在您應該可以使用該標識符調用prepareForSegue,而不會遇到致命錯誤。

2

如果你給賽格瑞在故事板不調用此self.performSegueWithIdentifier(「chosenPerson」,發件人:個體經營)didSelectItem

方法

如果你給賽格瑞在故事板覆蓋FUNC prepareForSegue - 此方法調用第一後didSelectItem調用

請參閱故事板一次(以下圖片爲樣品)

我認爲問題出在self.usersArray [indexPath.r嗷嗷] .userId願這將返回零

Swift2:

self.performSegueWithIdentifier("chosenPerson", sender: self) 

Swift3:

self.performSegue(withIdentifier: "chosenPerson", sender: self) 

Swift2:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

if segue.identifier == "chosenPerson" { 

    let chosenPerson = segue.destinationViewController as? chosenPersonViewController 
    let indexPaths = self.collectionView!.indexPathsForSelectedItems()! 
    let indexPath = indexPaths[0] as NSIndexPath 

    chosenPerson!.userID = self.usersArray[indexPath.row].userId //May it found nil please re - check array values 

} 

Swift3:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    if segue.identifier == "chosenPerson" { 

     let chosenPerson = segue.destination as! chosenPersonViewController 

     if let indexPath = collectionView.indexPathForSelectedItem { 

     chosenPerson!.userID = self.usersArray[indexPath.row].userId //May it found nil please re - check array values 

     } 




    } 
} 

enter image description here

相關問題