MILLEN BOX

音楽好きの組み込みソフトエンジニアによるプログラミング(主にiOSアプリ開発)の勉強の記録

Game Center 番外編。Leaders Boardの表示がNo Scoreから変更されない! [swift1.2] [Game Center]

前回まででGame Centerへの対応は一先ず終了しました。

SwiftでのGameCenterはじめの一歩。ログインを簡単に行う [Game Center初心者向け] [Swift1.2] - MILLEN BOX
Game Center 2歩目。非アクティブからの復帰時のGame Centerログインに対応する [Game Center初心者] [swift1.2] - MILLEN BOX
Game Center 3歩目。ハイスコアの送信に対応する [swift1.2] [Game Center] - MILLEN BOX
Game Center 4歩目(完結)。Leaders Boardでハイスコアの確認に対応する [swift1.2] [Game Center] - MILLEN BOX

対応の際、ちょっとハマってしまった箇所があります。
今回は、その部分を備忘録として残しておこうと思います。

自分ポイント1

はじめGame Centerのスコア送信処理を実装する際、スコアの更新部分を探すのを横着して、viewDidLoad 内にてベタッとスコア送信関数を実装しておりました。
その後、スコアの送信確認を行うために、Game Center用ボタンを押して、Leaders Boardを表示しました。
結果、スコアが表示されないのです。正確にはNo Socreと表示され、何度やっても期待するスコアが表示されることはありませんでした。

自分ポイント2

この問題の原因ですが、結論から言うと、スコアの送信タイミングがよろしくありませんでした。
Game CenterへのログインはAppDelegateのdidFinishLaunchingWithOptions内で行っており、この直後に viewDidLoad が呼ばれます。
そして自分ポイント1 でも言った通り、スコアの送信処理は viewDidLoad 内に入れておりました。

もうお判りかと思います。
viewDidLoad 内のスコア送信処理が実行された段階では、Game Centerへのログインが完了していなかったため、スコアを送信可能な状態ではなかったのです。
つまり、送信されていると思っていたスコアは、実は全然送信されていなかった!というオチでした。

スコア送信処理のログが Success となるのが解せないのですが、まぁあんまり深く入ると時間が勿体無いので、私はここで終了しています。

テスト実装する時には、実装タイミングも気にしないと、いらないところでハマって時間を使ってしまうので注意しましょう。