我目前正在开发一个战术屏幕应用程序,人们可以访问数据库进行添加以将玩家添加到他们的屏幕中。数据库工作正常,我现在正试图将玩家信息传递到选定的位置。玩家信息传递良好,但我现在无法尝试将玩家信息实施到选定位置:
var selectedP: Int?
@IBAction func selectAPlayer(_ sender: UITapGestureRecognizer) {
self.selectedP = sender.view!.tag
//print (selectedP!)
}
以上是演示我如何尝试使用selectedP
保存所选位置标记的方法,因此我可以访问其子视图。正确的标签在上述方法中打印出来。但是,当我尝试在另一个方法中调用它时,返回的变量总是为零。我不确定问题是什么。这是我尝试调用selectedP
变量的方法:
func setPlayer () {
//print(selectedP!)
}
简单地打印selectedP
会使程序崩溃,因为它明显等同于nil
。我有什么问题吗?
我必须注意,setPlayer()
方法是由来自另一个类的segue调用的,该类基本上是View Player
类。这在应用程序中显示为弹出窗口。我不确定如果你调用popoverController,变量基本上会恢复吗?
答案 0 :(得分:0)
如果我错了,请纠正我,但我相信你将你的变量设置为self.selectedP,而不是选择P.我对swift并不熟悉,但这个概念相当普遍。在python:
class foo():
def setBar():
self.bar = True
print(str(self.bar)) #prints True
print(str(bar)) #throws error
答案 1 :(得分:0)
想出来。不得不将变量传递给popover,然后返回。以下是我以更通用的方式完成的工作:
let viewController = "addPopover"
let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: viewController) as? PopoverViewController
// Above we get the popover, below we set a variable in that popover's class.
vc?.varThatNeedsToBeStored = sender.view!.tag
然后在popover类中的prepare segue方法中:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let nextScene = segue.destination as? TacticalCentreViewController
nextScene?.varThatNeedsToBeStored = varThatNeedsToBeStored
}
现在返回正确的标记值。