2016-10-03 19 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

相关问题