有4个视图控制器: raceViewController raceInfoViewController abilityCalcViewController abilityFinalViewController
快速概述应用程序的工作原理。首先,用户在abilityCalcViewController中启动,然后更新他们的统计数据,然后单击Select,然后再转到raceViewController。这里有两个按钮,一个指向raceInfoViewController,另一个指向abilityFinalViewController。每个不同的ViewControllers之间都有自己的一组信息要传递。
我的代码是:
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
if segue.identifier == "abilityFinalViewController"
{
let destFinalViewController: abilityFinalViewController = segue.destination as! abilityFinalViewController
destFinalViewController.strStatScore = strStatScore
}
else if segue.identifier == "raceInfoViewController"
{
let destViewController: raceInfoViewController = segue.destination as! raceInfoViewController
// Dwarf
if raceTable.indexPathForSelectedRow == [0,0]
{
print(raceTable.indexPathForSelectedRow ?? 0)
destViewController.raceName = races[0]
destViewController.raceStat = stats[0]
}
// Elf
else if raceTable.indexPathForSelectedRow == [0,1]
{
destViewController.raceName = races[1]
destViewController.raceStat = stats[1]
}
// Gnome
else if raceTable.indexPathForSelectedRow == [0,2]
{
destViewController.raceName = races[2]
destViewController.raceStat = stats[2]
}
// Half Elf
else if raceTable.indexPathForSelectedRow == [0,3]
{
destViewController.raceName = races[3]
destViewController.raceStat = stats[3]
}
// Half-Orc
else if raceTable.indexPathForSelectedRow == [0,4]
{
destViewController.raceName = races[4]
destViewController.raceStat = stats[4]
}
// Halfling
else if raceTable.indexPathForSelectedRow == [0,5]
{
destViewController.raceName = races[5]
destViewController.raceStat = stats[5]
}
// Human
else if raceTable.indexPathForSelectedRow == [0,6]
{
destViewController.raceName = races[6]
destViewController.raceStat = stats[6]
}
// Ifrit
else if raceTable.indexPathForSelectedRow == [0,7]
{
destViewController.raceName = races[7]
destViewController.raceStat = stats[7]
}
// Oread
else if raceTable.indexPathForSelectedRow == [0,8]
{
destViewController.raceName = races[8]
destViewController.raceStat = stats[8]
}
// Sylph
else if raceTable.indexPathForSelectedRow == [0,9]
{
destViewController.raceName = races[9]
destViewController.raceStat = stats[9]
}
// Tengu
else if raceTable.indexPathForSelectedRow == [0,10]
{
destViewController.raceName = races[10]
destViewController.raceStat = stats[10]
}
// Undine
else if raceTable.indexPathForSelectedRow == [0,11]
{
destViewController.raceName = races[11]
destViewController.raceStat = stats[11]
}
}
}
我的问题是,当我单击导致abilityFinalViewController的按钮或指向raceInfoViewController的按钮时,它会转换,但是没有传递任何数据。因此,当到达下一个目的地时,destFinalViewController.strStatScore = strStatScore
似乎是空白的。我遗漏了什么?
发布于 2016-12-21 12:34:56
注意,基于segue标识符决定要做什么的prepareForSegue代码是脆弱的。如果您忘记设置标识符,或者在标识符中有一个错误,则它不起作用。
在Swift中,我更喜欢使用基于目标视图控制器类的开关语句:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
switch segue.destinationViewController {
case let miniCarContainerViewController as MiniCartConatinerViewController:
//Code to configure MiniCartConatinerViewController
print("Destination is class MiniCartConatinerViewController")
case let addOnsItemViewController as AddonsItemViewController:
//Code to configure AddonsItemViewController
print("Destination is class MiniCartConatinerViewController")
default:
print("Destination is unknown class!")
break
}
}
case let
语法具有双重功能,因为它根据目标视图控制器的类将局部变量强制转换为正确的类型。
顺便说一句,类名和类型名应该总是以Swift大写字母开头。变量名应以小写字母开头。因此,您的abilityFinalViewController
类应该命名为AbilityFinalViewController
,raceInfoViewController
应该命名为RaceInfoViewController
。
https://stackoverflow.com/questions/41267524
复制相似问题