GKSession问题 - Objective-C GameKit

Jos*_*ley 5 iphone cocoa-touch objective-c gamekit

好吧,我一直在尝试创建自己的GKS​​ession对象,委托方法在控制台中给我一个错误,我还没有弄清楚如何修复.我想知道是否有人有任何建议或遇到过这个问题?*只是一个注释 - 变量peerStatus在我的代码中的其他地方定义.对等体可以被赋予"kServer"或"kClient"状态.我宁愿将每个定义为GKSessionModeServer或GKSessionModeClient,因为我已经读过,如果对等体在GKSessionModePeer中,则性能时间实际上较慢,因为它必须完成客户端和服务器的工作.

- (GKSession *)peerPickerController:(GKPeerPickerController *)picker sessionForConnectionType:(GKPeerPickerConnectionType)type {
    if (peerStatus == kServer) {
        GKSession *session = [[GKSession alloc] initWithSessionID:@"Josh_Land" displayName:nil sessionMode:GKSessionModeServer];
        return [session autorelease];
    }
    else {
        GKSession *session = [[GKSession alloc] initWithSessionID:@"Josh_Land" displayName:nil sessionMode:GKSessionModeClient];
        return [session autorelease]; 
    }
}
Run Code Online (Sandbox Code Playgroud)

整个错误代码是:

收听端口56386 2009-06-30 10:31:41.892 GKTank [17756:20b]***由于未捕获的异常'GKInvalidArgumentException'终止应用程序,原因:'必须提供具有GKSessionModePeer模式的vaild GKSession对象,或者在-peerPickerController:sessionForConnectionType:的实现中创建一个默认的GKSession对象返回'nil'.提供的对象是:发送0个数据包:rush(0个包0个字节):依赖(0个包0个字节):rtry(0个包0个字节):sack(0个包0个字节):当前加权平均值rtt(0 ms)会话模式:0'2009-06-30 10:31:41.893 GKTank [17756:20b] Stack:(807902715,2452446779,807986683,807986522,927035842,927037074,927038407,815223834,927038949,9245,8562,814709201,815110321, 815119058,815114270,814813151,814722763,814748641,839148405,807687520,8068683624,839142449,839142646,814752238)

Mar*_*don 7

我还没有实际使用GameKit实现任何东西,但只是查看文档,看起来如果你使用GKSessionModePeer你只能使用GKPeerPickerController.如果要使用GKSessionModeServer/Client,则需要直接使用会话及其委托.请参阅"游戏工具包编程指南"中有关实现服务器连接服务的部分.

你的主要功能将围绕着GKSessionDelegate方法
-session:peer:didChangeState:在客户端和服务器模式,并
-acceptConnectionFromPeer:error:-denyConnectionFromPeer:在服务器模式.