GKSession の動作に問題があります。以下は、特定のボタンが押されたときに実行される私のコードです。
GKSession *session;
if (connectButtonHasBeenPressed == false) {
    NSLog(@"connectToBluetoothDevice has been called");
    connectButtonHasBeenPressed = true;
    GKSession *session = [[GKSession alloc] initWithSessionID:@"Unicorn" displayName:nil sessionMode:GKSessionModePeer];
    [session setDataReceiveHandler:self withContext:nil];
    [session setDelegate:self];
    [session setAvailable:YES];
    NSLog(@"Session ID: %@", [session sessionID]);
    NSLog(@"Currently Available Peers: %i", [[session peersWithConnectionState:GKPeerStateAvailable] count]);
    if ([session isAvailable]) {
        NSLog(@"The Session Is Available");
    }
    [connectToDeviceButton setTitle:@"Searching..." forState:UIControlStateNormal];
}
else {
    NSLog(@"Currently Available Peers: %i", [[session peersWithConnectionState:GKPeerStateAvailable] count]);
}
最初にボタンを押した後、すべてが正常に機能しているように見えます。その後ボタンを押すたびに、「Currently Available Peers: 0」と表示されます。これは、ボタンを押した状態で両方のプログラムを実行して、2 つのデバイスを隣り合わせに配置していない場合に期待される出力です。また、すべての GKSessionDelegate メソッドがこのクラスに実装されており、これらすべてがメッセージをコンソールに記録します。これらのメソッドはいずれも実行されません。これはすべて、デバイスがお互いを見つけることができなかったことを示しています。
ただし、GKSession を使用して 2 つのデバイスを接続するサンプル プログラム GKRocket を実行したところ、同じ 2 つのデバイス間で問題なく動作しました。GKRocket のコードと私のプログラムのコードを比較しましたが、GKSession に影響を与えると思われる違いは見つかりませんでした。
助言がありますか?