0

我目前正在开发一个战术屏幕应用程序,人们可以在其中访问数据库以添加将玩家添加到他们的屏幕中。数据库工作正常,我现在正在尝试将玩家信息传递到所选位置。玩家信息传递得很好,但我现在在尝试将玩家信息实现到所选位置时遇到了麻烦:

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 变量基本上会恢复吗?

4

2 回答 2

0

弄清楚了。必须将变量传递给弹出框,然后再返回。这是我以更通用的方式做到的:

    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
}

现在返回正确的标签值。

于 2017-03-01T04:44:18.930 回答
0

如果我错了,请纠正我,但我相信您将变量设置为 self.selectedP,而不是 selectedP。我不熟悉 swift,但这个概念相当普遍。在蟒蛇中:

class foo():
    def setBar():
        self.bar = True
    print(str(self.bar)) #prints True
    print(str(bar))      #throws error
于 2017-03-01T04:34:29.830 回答