簡體   English   中英

如何正確選擇到其他ViewController

[英]How to segue to different ViewController properly

您好,我設置了應該正確從GameScene連接到另一個視圖控制器mainMenuViewController的代碼。 我為實現此目的而設置的代碼是

var viewController: GameViewController!
func segue() {
    viewController.dismissViewControllerAnimated(true, completion: nil)
    SettingsViewController.delete(self)
}

在GameViewController中

class GameViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    let skView = view as! SKView
    let scene = GameScene(size: skView.bounds.size)

    skView.showsFPS = true
    skView.showsNodeCount = true
    skView.ignoresSiblingOrder = false
    //skView.showsPhysics = true
    scene.scaleMode = .AspectFill
    skView.presentScene(scene)        
    scene.viewController = self
}

}

輕按SKLabelNode時會調用此方法。 我收到了使用此菜單的建議,因為mainMenu是玩家啟動游戲時首先加載的場景,並且他們選擇了gameScene,因此被告知要關閉GameScene而不是每次都創建新的segue。 我收到錯誤消息“致命錯誤:在展開可選值時意外發現nil”,並在每次點擊按鈕時發生崩潰。 我假設它是在談論viewController。 謝謝您的幫助!

如果正確理解您的問題,您正在嘗試關閉GameViewController。 但是方法dismissViewControllerAnimated僅關閉當前正在顯示的控制器。 因此,由於您的游戲視圖控制器未顯示任何內容,因此無法將其關閉。 正如您從他提出的GameViewController解雇控制器的代碼中說的那樣,它會嘗試執行您想要的操作,因此他獲取了所呈現的視圖控制器的屬性並嘗試將其解雇,但是該屬性為nil,因此出現了此類錯誤。 要解決此問題,您應該調用viewController.presentingViewController.dismissViewControllerAnimated(true, completion: nil) 屬性presentingViewController返回呈現您的控制器,在您的情況下,呈現GameViewController的控制器。 當您獲得此控制器時,您可以關閉由他提供的控制器(在這種情況下,所提供的控制器是您的GameViewController)。 因此,邏輯上可以說“父級”控制器具有解雇自己的權限(GameViewController)

我需要查看您的代碼。 現在看來,您嘗試調用delete方法來調用視圖控制器,但是據我所知,視圖控制器沒有這種方法。 因此,認為這是程序中的其他錯誤,主要是您將Noble_Ninja.SettingsViewController設置為希望具有此類方法的其他對象。 那是我的預測,我無法清晰地說出任何內容,因為我只有異常描述。 嘗試找到在代碼中調用此方法的位置,然后在此處放置制動點,然后在制動點停止程序時,在控制台中寫入日志(日志)-(po NAME_OF_INSTANCE_THAT_CALLS_SUCH_METHOD)-它會顯示真實實例類型,因此使用此信息,您可以找出真正的問題所在。 祝好運

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM