0

GKSession が自分自身 (同じデバイス) を検索しているのはなぜですか? GKRocket の例でも、なぜそうなるのでしょうか?

自己接続を行わないようにするにはどうすればよいですか?

4

3 に答える 3

1

デバイスからセッションが 1 つだけ開かれていることを確認してください。GKSession は、一致する ID を持つセッションを探します。同じ ID を持つデバイスから新しいセッションを作成すると、古いセッションが検索されます。

于 2011-05-02T08:26:26.730 に答える
0

あなたがしなければならないことは、使用することです:

session.available = NO;

検索しているデバイスで。検索が終了したら、YES に設定します。

セッションが AppDelegate の一部である場合:

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
于 2012-02-14T23:22:18.197 に答える
0

GKRocket の修正版でこの問題が発生しました。ピアが切断すると、アプリはフロント スクリーンに戻り、セッションを開始したビューをリロードしました。

アプリのできるだけ早い段階で GKSession を作成するクラスをインスタンス化して、これを修正する必要があります。ユーザーは、アプリを閉じるまで、それ以上戻ることはできません。次に、ピア リストなどを呼び出すことができるように、ナビゲーション スタック全体でセッション コントローラー クラスへのポインターを維持します。

これらのメソッドは、AppDelegate の後の最初のビュー コントローラーからのものです。

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

//We setup the GKSession at this stage so that we do not create duplicate sessions as
//the user navigates to and from the game lobby controller finding and managing peers
manager = [[SessionManager alloc] init];
manager.lobbyDelegate = nil;  //There is no game lobby at this stage so we nil this.
[manager setupSession];
// call the session manager's setup method to create the session. It will start
//looking for peers right away, but we won't see that until we go to the game lobby

}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
//Pass a pointer to the session manager along the line of segues
[[segue destinationViewController] setManager:self.manager];
}

このコードは GKRocket から変更されています。そのチュートリアルをチェックして、setupSession などのメソッドが何をするかを確認してください。

于 2013-09-17T17:24:28.527 に答える