У меня возникла проблема с запуском 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]);
}
После первого нажатия кнопки все работает нормально. И каждый раз, когда я нажимаю кнопку после этого, он печатает «Доступные в настоящее время одноранговые узлы: 0». Это был бы ожидаемый результат, если бы у меня не было двух устройств, расположенных рядом друг с другом, запускающих программу с нажатой кнопкой. У меня также есть все методы GKSessionDelegate, реализованные в этом классе, и все они выводят сообщение на консоль. Ни один из этих методов никогда не запускается. Все это указывало бы мне на то, что устройства не могут найти друг друга.
Однако я запустил пример программы GKRocket, которая использует GKSession для подключения двух устройств, и она отлично работает между этими двумя устройствами. Я сравнил код GKRocket с кодом моей программы и не нашел никаких различий, которые, по моему мнению, могли бы повлиять на GKSession.
Какие-либо предложения?