我正在尝试segue并传递数据(从UITableView到UIViewController)。我的代码是
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "IndividualAchievementsSegue" {
let destination = segue.destinationViewController as? IndividualAchievementsViewController
let cell = sender as! UITableViewCell
let selectedRow = AchievementsTable.indexPathForCell(cell)!.row
destination!.viaSegue = achievements[selectedRow]
print(selectedRow)
}
}
但该行让cell = sender为! UITableViewCell正在抛出
无法将'ProgramName.AchievementsViewController'类型的值转换为'UITableViewCell'
我也试过
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "IndividualAchievementsSegue" {
let destination = segue.destinationViewController as? IndividualAchievementsViewController
let selectedRow = AchievementsTable.indexPathForSelectedRow!.row
destination!.viaSegue = achievements[selectedRow]
print(selectedRow)
}
}
失败是因为它在achievements[selectedRow]
期间发现nil解包可选项,因为这显然给了let selectedRow = AchievementsTable.indexPathForSelectedRow!.row
答案 0 :(得分:1)
我认为问题在于您的segue与AchievementsViewController
到IndividualAchievementsViewController
而不是UITableViewCell
与IndividualAchievementsViewController
相关联。检查故事板,并使用TableCell
到IndividualAchievementsViewController
更正segue。
答案 1 :(得分:0)
所以解决方案是进入DidSelectrowAtIndexPath并删除DeselectRowAtIndexPath,它在那里偶然发生了两次。然后使用以下
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "IndividualAchievementsSegue" {
let destination = segue.destinationViewController as? IndividualAchievementsViewController
let selectedRow = AchievementsTable.indexPathForSelectedRow?.row
destination!.viaSegue = achievements[selectedRow!]
print(selectedRow)
}
}