4.0 で実行されているゲームキット アプリケーションは、GKSession オブジェクトの削除を適切に処理しません。3.1.3 または 3.2 で実行している場合、ピアが切断され、セッションがクリーンアップされた場合 (Apple のデモのように):
[gkSession disconnectFromAllPeers];
[gkSession setAvailable:NO];
[gkSession setDelegate:nil];
[gkSession setDataReceiveHandler:nil withContext:nil];
次に、他のピアが状態の変更を受信し、ピアのテーブル ビューを更新できます。
私のアプリケーションでは、1 つのピアがサーバーとして起動し、もう 1 つのピアがクライアントとして起動します。クライアントがサーバーへの接続を要求すると、クライアントの名前がサーバーのプレイヤー リストに表示されます。サーバーがリクエストを受け入れることを選択すると、セッション接続が確立され、ゲームをプレイできるようになります。ただし、サーバーが要求を受け入れる前にクライアントが終了した場合、クライアントはセッションをクリーンアップし (上記のように)、それに応じて (状態変更を受信すると) サーバーのピア リストからクライアントが消えます。これは 3.1–3.2 で驚くほど機能します
4.0 で実行されている同じアプリケーションを実行すると、サーバーとクライアントがエラーをスローし、ピアが状態の変更を受信するのに非常に長い時間がかかります。受信すると、アプリケーションはエラーなしでクラッシュします (ビルドで NSZombieEnabled=YES を使用しても)。引数)。サーバーは、クライアントから「状態変更」メッセージを受け取ることはありません。代わりに、次のエラーがスローされます。
Thu Jul 8 23:27:26 unknown com.apple.mDNSResponder[18] <Notice>: BTLocalDeviceRemoveData: 60 byte key, 18 byte value
Thu Jul 8 23:27:26 unknown MobileBluetooth[29] <Notice>: BTLocalDeviceRemoveData - BT_ERROR_INVALID_HANDLE
Thu Jul 8 23:27:26 unknown com.apple.mDNSResponder[18] <Notice>: Call to BTLocalDeviceRemoveData failed with error 7
Thu Jul 8 23:13:39 unknown mDNSResponder[18] <Error>: external_stop_advertising_service: 18 00Z1Tud0A\\.\\.Tonberry\M-b\M^@\M^Ys\\032iPhone._1htnu3uko0uvsp._udp.local. TXT txtvers=1\M-B\M-&state=A
Thu Jul 8 23:13:39 unknown MobileBluetooth[29] <Notice>: BTLocalDeviceRemoveData - BT_ERROR_INVALID_HANDLE
私が思うに、重要なエラーは次のとおりです。
Tue Jul 13 21:04:50 Tonberry com.apple.mDNSResponder[21] <Notice>: Call to BTDiscoveryAgentStopScan failed with error 400
セッションが利用できなくなっていないように見えます (サービスのアドバタイズを停止する際のエラー)。実際のクラッシュ:
Thread 3 Crashed:
0 GameKitServices 0x06352f90 gckSessionChangeStateCList + 411
1 GameKitServices 0x0635b49c gckSessionRecvProc + 1474
2 libSystem.B.dylib 0x981c181d _pthread_start + 345
3 libSystem.B.dylib 0x981c16a2 thread_start + 34
進行中の完全なアプリケーションでバグを報告しました。アプリ自体は完成しており、提出する準備がほぼ整っており、3.1.3/3.2 でかなりうまく動作しますが、現在の 4.0 の Gamekit の状態では提出できません。非常に失望したので、このバグレポートが将来役立つことを願っています. 誰かがこのエラーまたは私が間違っている可能性があることを理解していれば、私は非常に感謝しています.
できれば助けてください。私はこのアプリケーションでここにタオルを投げようとしていますが、それはとても近いです.