我想从一个 View Controller 移动到另一个 View Controller 并发送 userId:
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
}
通过单击我得到:“ fatal error :在展开可选值时意外发现 nil” 我做错了什么?
最佳答案
如果你在 StoryBoard 中给出了 segue 不要在 didSelectItem 中调用这个 self.performSegueWithIdentifier("chosenPerson", sender: self) 方法
如果你在 Storyboard中给出了 segue override func prepareForSegue - 这个方法在 didSelectItem 调用之后先调用
请引用 Storyboard一次(下图示例)
我认为问题出在 self.usersArray[indexPath.row].userId 可能会返回 nil
swift 2:
self.performSegueWithIdentifier("chosenPerson", sender: self)
swift 3:
self.performSegue(withIdentifier: "chosenPerson", sender: self)
swift 2:
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
}
swift 3:
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
}
}
}
关于Swift 准备 segue - 将数据从一个 View Controller 发送到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39830552/