2009-06-30 30 views
5

私は自分自身のGKSessionオブジェクトを作成しようとしていましたが、デリゲートメソッドではコンソールでエラーが発生しています。誰かに何か提案があったのか、この問題に遭遇したのかしら? *単なるメモ - 変数peerStatusは私のコードのどこかで定義されています。ピアには、「kServer」または「kClient」のステータスを与えることができます。 GKSessionModeServerまたはGKSessionModeClientにそれぞれを定義することにします。ピアがGKSessionModePeerにある場合、クライアントとサーバーの両方の作業を実行する必要があるため、実際にはパフォーマンスが低下します。GKSessionの問題 - Objective-C GameKit

- (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]; 
    } 
} 

全体のエラーコードである:31:41.892 GKTank [17756:20B]

ポート56386 2009-06-30 10にリスニングによるキャッチされない例外 'GKInvalidArgumentException' に***アプリを終了します理由: 'GKSessionModePeerモードのvaild GKSessionオブジェクトを指定するか、-peerPickerController:sessionForConnectionType:の実装でデフォルトのGKSessionオブジェクトreturn' nil 'を作成する必要があります。提供されたオブジェクトは次のとおりです。0データパケットの送信:rush(0パケット0バイト):rely(0パケット0バイト):rtry(0パケット0バイト):sack(0パケット0バイト):現在の加重平均rttセッションモード:0' 2009-06-30 10:31:41.893 GKTank [17756:20B]スタック( 807902715、 2452446779、 807986683、807986522 、 927035842、927037074 、 927038407、815223834 、 927038949、9245 、 8562、 814709201、815110321 、 815119058、815114270 、 814813151、 814722763、 814748641、 839148405、 807687520、 807683624、 839142449、 839142646、)

+0

エラーが表示された場合は役立ちます。 –

+0

申し訳ありません、私は今、エラーコードで投稿を編集しました。私がGKSessionをGKSessionModePeerに設定して実行すると、実際に動作しますが、私はそのフォームから離れようとしています。むしろ、セッションをサーバーモードまたはクライアントモードにするように指定します。私はこれが今でも可能であるかどうか疑問に思っていました(どこに出てきたのでしょうか?コードにバグがありますか?)、それとも私のコードですか? –

+0

私は答えは分かりませんが、どのような点で実際に遅いかどうかをテストしましたか?それだけでは読んだほうが遅いですが、実際にはパフォーマンスが低下していないのであれば、時期尚早の最適化である可能性があります。 これは、あなたのテストで何がうまくいかないのかを知ることは興味深いことです。 –

答えて

7

私は実際にはまだGameKitを使用して何かを実装していないが、ちょうどドキュメントを見ている、それは次のようになりますGKSessionModePeerを使用している場合のみ、GKPeerPickerControllerを使用できます。 GKSessionModeServer/Clientを使用する場合は、セッションとそのデリゲートを直接操作する必要があります。ゲームキットプログラミングガイドのImplementing a ServerConnecting to a Serviceに関するセクションを参照してください。

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

+0

ああありがとう、私はそれを試み、結果を報告します。 –

+0

リンゴを確認した後、あなたは正しいです。 –

関連する問題