GKSession ищет себя (одно и то же устройство), почему? Даже в примере GKRocket, почему это так?Почему iphone ищет себя в GKSession?
Как я могу остановиться, чтобы не подключаться самостоятельно?
GKSession ищет себя (одно и то же устройство), почему? Даже в примере GKRocket, почему это так?Почему iphone ищет себя в GKSession?
Как я могу остановиться, чтобы не подключаться самостоятельно?
убедитесь, что с устройства открыто только одно сеанс. GKSession ищет сеансы с совпадающим идентификатором ... если вы создадите новый сеанс с вашего устройства с тем же идентификатором, он найдет более старую сессию ..
То, что вы должны сделать, это использовать:
session.available = NO;
на устройстве, которое находится в поиске. Просто установите его в YES, когда поиск закончен.
Если сессия является частью AppDelegate:
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
Я получил эту проблему в модифицированной версии 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.
,, Я до сих пор не понял, что именно вы имеете в виду, может ли U объяснить больше? –
Я думаю, это означает, что если ваше приложение воссоздает сеанс по какой-либо причине с использованием одного и того же идентификатора сеанса, тогда существуют два таких сеанса. Одна из сессий тогда думает, что другое - другое устройство и перечисляет его в таблице сверстников. Это правильно? – Tim