2017-03-01 196 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 
} 

這就是現在返回正確的標記值。