GKSession正在搜索自己(相同的设备),为什么? 即使在GKRocket示例中,为什么会这样呢?
如何停止不进行自我连接?
答案 0 :(得分:1)
确保设备只打开一个会话.. GKSession查找具有匹配ID的会话...如果您从具有相同ID的设备创建新会话,它将找到较旧的会话..
答案 1 :(得分:0)
您需要做的是:
session.available = NO;
正在搜索的设备上。只需在搜索结束时将其设置为YES即可。
如果会话是AppDelegate的一部分:
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
答案 2 :(得分: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之类的方法。