5

わかりました、私は独自の GKSession オブジェクトを作成しようとしてきましたが、デリゲート メソッドによってコンソールにエラーが表示され、まだ修正方法がわかりません。誰か提案があるか、この問題に遭遇したかどうか疑問に思っていましたか? *注記 - 変数 peerStatus はコードの別の場所で定義されています。ピアには、「kServer」または「kClient」のステータスを指定できます。ピアが GKSessionModePeer にある場合、クライアントとサーバーの両方の作業を行う必要があるため、実際にはパフォーマンス時間が遅くなるということを読んだので、それぞれを GKSessionModeServer または GKSessionModeClient に定義したいと思います。

- (GKSession *)peerPickerController:(GKPeerPickerController *)picker sessionForConnectionType:(GKPeerPickerConnectionType)type {
    if (peerStatus == kServer) {
        GKSession *session = [[GKSession alloc] initWithSessionID:@"Josh_Land" displayName:nil sessionMode:GKSessionModeServer];
        return [session autorelease];
    }
    else {
        GKSession *session = [[GKSession alloc] initWithSessionID:@"Josh_Land" displayName:nil sessionMode:GKSessionModeClient];
        return [session autorelease]; 
    }
}

エラーコード全体は次のとおりです。

ポート 56386 でリッスンしています 2009-06-30 10:31:41.892 GKTank[17756:20b] *** キャッチされていない例外 'GKInvalidArgumentException' が原因でアプリを終了しています。理由: 'GKSessionModePeer モードの有効な GKSession オブジェクトを指定する必要があります。 -peerPickerController:sessionForConnectionType: の実装でデフォルトの GKSession オブジェクトを作成し、'nil' を返します。提供されたオブジェクトは: 送信された 0 データ パケット : ラッシュ (0 パケット 0 バイト): 信頼 (0 パケット 0 バイト) : rtry (0 パケット 0 バイト) : 袋 (0 パケット 0 バイト) : 現在の加重平均 rtt (0 ミリ秒) session mode: 0' 2009-06-30 10:31:41.893 GKTank[17756:20b] Stack: ( 807902715, 2452446779, 807986683, 807986522, 927035842, 927037074, 927038407, 815223834, 927038949, 9245, 8562, 814709201, 815110321, 815119058、815114270、

4

1 に答える 1

7

まだ GameKit を使って実際に実装したことはありませんが、ドキュメントを見てみると、GKSessionModePeer を使用している場合にのみ GKPeerPickerController を使用できるようです。GKSessionModeServer/Client を使用する場合は、セッションとそのデリゲートを直接操作する必要があります。サーバーの実装サービスへの接続に関するゲーム キット プログラミング ガイドのセクションを参照してください。


-session:peer:didChangeState:主な機能は、クライアント モードとサーバー モードの両方、およびサーバー モードで GKSessionDelegate メソッドを
-acceptConnectionFromPeer:error:中心 に展開し -denyConnectionFromPeer:ます。

于 2009-06-30T17:36:48.420 に答える