2017-03-01 138 views
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,变量基本上会被恢复?

+0

尝试一次一个或这两个'var selectedP:Int!'和'self.selectedP = sender.tag'。我只是说我没有尝试过。 – knownUnknown

+0

@creatando setPlayer应该在你的IBAction中调用,只有当你执行你的action时,你才能获得你的变量值。在那之前你不能调用setPlayer方法。 –

回答

0

纠正我,如果我错了,但我相信你设置你的变量为self.selectedP,不选P。我不熟悉迅速,但这个概念是相当普遍的。在python中:

class foo(): 
    def setBar(): 
     self.bar = True 
    print(str(self.bar)) #prints True 
    print(str(bar))  #throws error 
+0

我在添加'self.'之前尝试过了,似乎并没有很大的不同。 – creatando

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 

然后在酥料饼类我准备赛格瑞方法:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    let nextScene = segue.destination as? TacticalCentreViewController 
    nextScene?.varThatNeedsToBeStored = varThatNeedsToBeStored 
} 

这就是现在返回正确的标记值。