变量不存储?
Variable not storing?
我目前正在开发一个战术屏幕应用程序,人们可以在其中访问数据库以将玩家添加到他们的屏幕中。数据库工作正常,我现在正在尝试将玩家信息传递到选定位置。玩家信息传递正常,但我现在在尝试将该玩家信息应用到选定位置时遇到了麻烦:
var selectedP: Int?
@IBAction func selectAPlayer(_ sender: UITapGestureRecognizer) {
self.selectedP = sender.view!.tag
//print (selectedP!)
}
以上方法演示了我如何尝试使用 selectedP
保存所选位置的标签,以便我可以访问其子视图。上面的方法打印出正确的标签。但是,当我尝试在另一个方法中调用它时,返回的变量始终为 nil。我不确定是什么问题。这是我尝试调用 selectedP
变量的方法:
func setPlayer () {
//print(selectedP!)
}
简单地打印 selectedP
会使程序崩溃,因为它显然等同于 nil
。我做错了什么吗?
我必须注意 setPlayer()
方法是由另一个 class 的 segue 调用的,它本质上是 View Player
class。这在应用程序中显示为弹出窗口。我不确定如果你调用 popoverController 变量基本上得到恢复?
如果我错了请纠正我,但我相信您将变量设置为 self.selectedP,而不是 selectedP。我不熟悉 swift,但这个概念相当普遍。在 python:
class foo():
def setBar():
self.bar = True
print(str(self.bar)) #prints True
print(str(bar)) #throws error
想通了。必须将变量传递给弹出窗口,然后返回。这是我如何以更通用的方式做到的:
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
然后在我的 prepare segue 方法中的 popover class:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let nextScene = segue.destination as? TacticalCentreViewController
nextScene?.varThatNeedsToBeStored = varThatNeedsToBeStored
}
这现在 returns 正确的标签值。
我目前正在开发一个战术屏幕应用程序,人们可以在其中访问数据库以将玩家添加到他们的屏幕中。数据库工作正常,我现在正在尝试将玩家信息传递到选定位置。玩家信息传递正常,但我现在在尝试将该玩家信息应用到选定位置时遇到了麻烦:
var selectedP: Int?
@IBAction func selectAPlayer(_ sender: UITapGestureRecognizer) {
self.selectedP = sender.view!.tag
//print (selectedP!)
}
以上方法演示了我如何尝试使用 selectedP
保存所选位置的标签,以便我可以访问其子视图。上面的方法打印出正确的标签。但是,当我尝试在另一个方法中调用它时,返回的变量始终为 nil。我不确定是什么问题。这是我尝试调用 selectedP
变量的方法:
func setPlayer () {
//print(selectedP!)
}
简单地打印 selectedP
会使程序崩溃,因为它显然等同于 nil
。我做错了什么吗?
我必须注意 setPlayer()
方法是由另一个 class 的 segue 调用的,它本质上是 View Player
class。这在应用程序中显示为弹出窗口。我不确定如果你调用 popoverController 变量基本上得到恢复?
如果我错了请纠正我,但我相信您将变量设置为 self.selectedP,而不是 selectedP。我不熟悉 swift,但这个概念相当普遍。在 python:
class foo():
def setBar():
self.bar = True
print(str(self.bar)) #prints True
print(str(bar)) #throws error
想通了。必须将变量传递给弹出窗口,然后返回。这是我如何以更通用的方式做到的:
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
然后在我的 prepare segue 方法中的 popover class:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let nextScene = segue.destination as? TacticalCentreViewController
nextScene?.varThatNeedsToBeStored = varThatNeedsToBeStored
}
这现在 returns 正确的标签值。