17

私は GameKit について学ぶためにいくつかの実験を行っており、単純なゲームと、プレーヤーの試合を一覧表示するインターフェイスを作成しました。removeWithCompletionHandler:試合でメソッドを使用してゲームを削除する機能を追加しようとしGKTurnBasedMatchていますが、無効な状態になっているように見える を削除するのに問題があります。

問題の試合の po は次のように表示されます。

$0 = 0x1d590d20 <GKTurnBasedMatch 0x1d590d20 id:858d8257-cc49-4060-b1d8-38c09a929e3c status:Ended message: taken:2013-03-08 18:08:47 +0000 created:2013-03-08 03:24:14 +0000
current:<GKTurnBasedParticipant 0x1d58c020 - id:G:1717956303 (local player) status:Invited outcome:None lastTurn:(null)>
participants:
    <GKTurnBasedParticipant 0x1d58bc90 - id:G:1717239488 status:Done outcome:Quit lastTurn:2013-03-08 18:08:47 +0000>
    <GKTurnBasedParticipant 0x1d58c020 - id:G:1717956303 (local player) status:Invited outcome:None lastTurn:(null)>
>

これは、試合が終了したことを示しているようです。ただし、参加者の 1 人の結果は: なしです。これは、終了したゲームでは無効であるとドキュメントに導かれています。ゲームを単純に削除しようとすると、次のようになります。

1 つ以上のパラメーターが無効であるため、要求された操作を完了できませんでした。

結果を設定してゲームを終了しようとすると、次のようになります。

セッションが無効な状態にあるため、要求された操作を完了できませんでした。

ローカルプレイヤーがアクティブな参加者であるため、おそらくゲームを削除できないと思いましたが、両方participantQuitInTurnWithOutcome:...ともendTurnWithNextParticipants:...エラーが発生します。

セッションが無効な状態にあるため、要求された操作を完了できませんでした。

同じように。何か間違ったことをしているのですか、それともどうにかして削除できないゲームを作成したのでしょうか?

PS また、Game Center が提供するインターフェイスからゲームを削除することもできません。ゲームは [ゲーム オーバー] セクションに表示されます。

4

5 に答える 5

5

残念ながら、まったく同じエラーに遭遇しました。他の人が問題を理解するのを助けるために、解決策を研究することを期待して、友人を試合に招待することでこれを再現できますが、招待されたプレイヤーにそのターンを送信する前に、最初のターン中に試合を終了します. 次に、ホスト プレイヤーが Game Center からマッチを削除します。招待されたプレイヤーのデバイスには、上記のようなマッチがあり、削除することはできません。あらゆる種類の回避策を試しました。

まだ運がありませんが、解決策が見つかったら、回答を更新します。私は現在 Game Center のゲームを出荷しようとしているので、これを回避する方法を見つけなければなりません。1日か2日で結論が出ます。

更新: 削除不可の試合を調べましたが、招待ステータスのプレイヤーの試合結果が勝ったことを除けば、あなたの試合とほとんど同じです。試合を無効な状態にする鍵は、1 人のプレーヤーのステータスを Done ではなく Invited にすることですが、試合のステータスを Ended にすることです。これは、2 つのケースに共通する要素であり、Apple の複雑な Game Center コードのエッジ ケースです。彼らが単にこのエッジケースを台無しにして、プレーヤーをその状態にすることは想定されていないことを「知っている」と期待したとしても、私は驚かないでしょう(間違いなく、彼らのドキュメントを十分に注意深く読めば、最終的にこれをつなぎ合わせます)。

私の結論としては、Apple には簡単に見過ごされてしまう特殊なケースがあるということです。これは、新しいマッチを終了した場合にのみ発生する可能性があり、友人を招待した場合にのみ発生する可能性があるためです。また、試合の結果を不適切に設定していない場合、それは決して起こらないと思いますので、彼らはそれを捕まえませんでした.

まだ出荷していないので、この状態で一致を検出して無視するようにアプリを構成します。この状態にある一致の数をコンソールに報告します。これは、この時点を超えて増加しないようにするためです。次に、終了コードを分析し、この極端なケースでは、一致をこの状態に戻すことは決してできないことを確認します。私たちが知っていることを考えると、私たちは積極的にならなければならないと思います.

うまくいけば、まだ出荷していないので、エラー ケースの一致は Game Center Sandbox 環境にローカライズされます。実際には、悪い一致はサンドボックスでテスト ユーザーにローカライズされているだけなので、問題を修正したら、そのユーザーを破棄して新しいユーザーで開始することができます。上記の提案を実装すると、この手順を実行する前に、アプリが正常に動作していることを確認できるはずです。

これらのエラーの一致が存在する場合、それらを削除する方法を誰かが実際に見つけられる場合は、お知らせください。ただし、私の提案と実際の原因の特定が、プロジェクトを進めるのに十分であることを願っています.

于 2013-03-16T05:08:18.223 に答える
4

少し違うとはいえ、私も似たような状況です。試合を開始し、2 番目のサンドボックス アカウントをプレイに招待すると、最初のプレイヤーが終了し、2 番目のプレイヤーが応答する前にゲームを削除します。2 番目のプレイヤーがゲームを終了しようとすると、次のエラーが発生します。

Error quitting match in turn: Error Domain=GKErrorDomain Code=22 "The requested operation could not be completed because the specified participant is invalid." 
UserInfo=0x1f5de800 {
    GKServerStatusCode=5097, 
    NSUnderlyingError=0x1f58b610 "The operation couldn’t be completed. 
    status = 5097, 
    Invalid state: turn sent to playerId:1952436619 in slotIndex: 0 for sessionId: 698b074b-fa0b-4505-834f-1b4305b7eecb : expected slot state: Active but found: Inactive", 
    NSLocalizedDescription=The requested operation could not be completed because the specified participant is invalid.
}

私が知る限り、次に移動する参加者のステータスが「完了」になっているため、これが発生しています。これは、彼らがすでに終了したためだと推測しています。

<GKTurnBasedMatch 0x1f532b20    id:698b074b-fa0b-4505-834f-1b4305b7eecb status:Open message: taken:2013-03-30 19:53:47 +0000 created:2013-03-30 18:29:09 +0000
current:<GKTurnBasedParticipant 0x1f532b80 - id:G:1952433332 (local player) status:Active outcome:None lastTurn:2013-03-30 19:53:47 +0000>
participants:
        <GKTurnBasedParticipant 0x1f532b70 - id:G:1952436619 status:Done outcome:Lost lastTurn:2013-03-30 18:29:10 +0000>
        <GKTurnBasedParticipant 0x1f532b80 - id:G:1952433332 (local player) status:Active outcome:None lastTurn:2013-03-30 19:53:47 +0000>
    >

うまくいけば、これが他の人が診断するのに役立つことを願っています。回避策または解決策に関する他の人の洞察を聞きたいです。これが Apple 側のバグである場合、レーダーを提出する価値があるように思われます。

于 2013-03-31T00:25:26.033 に答える
2

Apple テクニカル デベロッパ サポートがこの問題を確認しました。バグレポートを提出しました。お知らせします。

于 2013-04-10T13:20:13.097 に答える