私は作業中のシンプルなシングルプレイヤーゲームを持っています。このボタンはセグを実行し、GameViewController内のすべてのゲームロジックが期待どおりに動作しています。警告:ビューがウィンドウ階層内にないビューを別のビューコントローラに表示しようとしました
私はthis tutorialに続き、自分のゲームにマルチプレーヤー機能を追加しました。
func findMatchWithMinPlayers (minPlayers: Int, maxPlayers: Int, viewController: UIViewController, delegate: GameKitHelperDelegate) {
matchStarted = false
let request = GKMatchRequest()
self.delegate = delegate
request.minPlayers = 2
request.maxPlayers = 2
presentingViewController = viewController
presentingViewController.dismissViewControllerAnimated(false, completion: nil)
let mmvc = GKMatchmakerViewController(matchRequest: request)
mmvc?.matchmakerDelegate = self
presentingViewController.presentViewController(mmvc!, animated: true, completion: nil)
self.delegate?.matchStarted()
}
クラスMultiPlayerNetworkingがGameKitHelperプロトコルを実装し、matchStarted関数に呼び出される:初期ビューコントローラで 、ボタンがGameKitHelper.swiftに次の実装を有する
GameKitHelper.sharedGameKitHelper.findMatchWithMinPlayers(2, maxPlayers: 2, viewController: self, delegate: MultiPlayerNetworking)
}
を呼び出し。 ここでは、MultiPlayerNetworkingクラスが引き継ぎ、ホストやリモートプレーヤーにメッセージを送信し始めます。オートマッチング仕上げは、以下の機能がGameKitHelperに呼び出さ
注いくつかの時間後のこと、:今すぐ
func matchmakerViewController(viewController: GKMatchmakerViewController, didFindMatch match: GKMatch) {
viewcontroller.dismissViewControllerAnimated(true, completion: {})
self.match = match
match.delegate = self
}
、私はそれによって私の最初のビューコントローラを示し、これはGKMatchmakerViewControllerが却下されていることを言うと思いますもう一度(これは画面上で起こることです)。
今問題! GKMatchmakerViewControllerが終了した後、私は最初のビューコントローラーに戻って、自分のgameView(マルチプレーヤーゲームにも対応するロジックを持っている)に自動セグを「シミュレート」したいと思っています。
私は最初のビューコントローラがセグエをシミュレートする機能を有するMultiPlayerNetworkingプロトコルに準拠作った:
func segueToGVC() {
self.performSegueWithIdentifier("game", sender: nil) // self = initial view controller
}
しかし、Xcodeのは、と文句を言う:
Warning: Attempt to present <GameViewController: 0x7d440050> on <GKMatchmakerViewController: 0x7c8fbc00> whose view is not in the window hierarchy!
私はここで立ち往生し、viewControllerのperformSegue関数をthis link経由で呼び出していることを確認するために、View Controllerを無効にするさまざまな方法を試しましたが、何も機能しません。
私の質問:なぜGKMatchmakerViewControllerは視覚的に却下されますが、最初のビューコントローラでperformSegue関数を呼び出すと上記のエラー/警告が表示されるようなビュー階層にも存在しますか?
ご意見をいただきありがとうございます。
Thans matt。自己質問では:私はクラスの初期ビューコントローラにあり、私はビューコントローラ内の関数にある場合、自己本当に何か異なることができますか?答えが "はい"の場合、私はこの物を読んで、現在の考え方を変える必要があります。 –
時間を忘れると、別のセグを実行しようとする前にディスカッションが完了していることを確認するにはどうすればよいですか? –
まあ、私は 'segueToGVC'をどこで呼んでいるのか分かりません。しかし、新しいプレゼンテーションでの解雇には、解雇の「完了」からプレゼンテーションをしたいと思うでしょう。それが補完的なものです。 – matt