2016-09-20 17 views
15

Xcode 8を使用して、swift 3とエンティティが有効になっているゲームテンプレートを使用してiOSアプリケーションを作成します。 addChildを一度しか使用していないのに、私はいくつかの初期スプライトの二重ノード数を見ていることに気付きました。sceneDidLoadが2回呼び出されていますか?

私は、コードと、これが二回呼び出されている理由がないという考えに

override func sceneDidLoad() { 
print(#function) ... } 

を追加しました。

2016-09-20 10:21:31.482 MMDecon1[3295:791435] SKUtil.m: MGGetBoolAnswer is not available in the simulator. 
sceneDidLoad() 
sceneDidLoad() 

ログファイルが...私は

override func didMove(to view: SKView) {..} 

を追加し、一時的な修正として、ここで私の初期化コードを置きます。

sceneDidLoad()がエンティティを使用するデフォルトのゲームアプリケーションコードで2回発生する理由を知っていますか?

+2

xcodeはシーンのダミーバージョンを最初に設定し、その後は実際のシーンを設定するためです。理由は分かりませんが、Appleは正しく動作していると言っています – Knight0fDragon

+0

どこを見つけましたか? 'sceneDidLoad'のコメントは' 'これはワンタイムセットアップを実行するのに推奨される場所です ''と答えています。" –

+0

ありがとうございます。 – JohnnieMac

答えて

1

通常、sceneDidLoadは1回だけ呼び出されます。ただし、メモリ警告が送信されると、UIViewControllerはシーンを解放し、ビューコントローラが表示されていない場合はnilに設定します。シーンが次回表示されると、View Controllerはシーンをリロードし、再度sceneDidLoadを呼び出します。

sceneDidLoadを複数回呼び出すことができると仮定する必要があります。

didReceiveMemoryWarningを実装し、何が起こっているかを見るためにブレークポイントを設定するかログを設定します。

関連する問題