2016-08-25 4 views
0

enter image description here私はセグを行い、データを(UITableViewからUIViewControllerに)渡そうとしています。私のコードはUITableViewが送信側としてセルを使用していません

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) 
    } 
} 

ですが、let cell = sender as! UITableViewCellのは

を投げている

型の値に 'ProgramName.AchievementsViewController' にキャストできませんでした 'のUITableViewCell' 私もそれはオプションをアンラップnilを見つけたので、失敗し

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]の間にそれは明らかに私に無しを与えますlet selectedRow = AchievementsTable.indexPathForSelectedRow!.row

答えて

1

私はプロあなたのセグがUITableViewCellからIndividualAchievementsViewControllerではなく、AchievementsViewControllerからIndividualAchievementsViewControllerに接続されているということです。ストーリーボードにチェックインして、TableCellからIndividualAchievementsViewControllerにセグを修正してください。

+0

私はあなたが正しいと思いますが、奇妙なことに、クリックしてプロトタイプのセルからIndividualAchievementsViewControllerにドラッグしてセグを作成しました。しかし、私が調べると、側面の接続点にマウスをかざすと、View Controller全体が選択されます。 TableCellをIndividualAchievementsViewControllerに接続するトリックはありますか? – Nick

+0

最初にその古いセグを削除してください。その後、ビュー階層で 'TableCell'を選択して' ctrl'を押して 'IndividualAchievementsViewController'にドラッグしてください。 –

+0

いいえ、同じエラー – Nick

0

したがって、解決策はDidSelectrowAtIndexPathに行き、DeselectRowAtIndexPathを削除することでしたが、これは偶然に2回ありました。次に、以下を使用してください

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) 
    } 
} 
関連する問題