Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone GK会话问题-Objective-C GameKit_Iphone_Objective C_Cocoa Touch_Gamekit - Fatal编程技术网

Iphone GK会话问题-Objective-C GameKit

Iphone GK会话问题-Objective-C GameKit,iphone,objective-c,cocoa-touch,gamekit,Iphone,Objective C,Cocoa Touch,Gamekit,好的,我一直在尝试创建我自己的GKSession对象,委托方法在控制台中给了我一个错误,我还没有弄清楚如何修复这个错误。我想知道是否有人有任何建议或遇到过这个问题*请注意——变量peerStatus在我的代码中的其他地方定义。对等方的状态可以是“kServer”或“kClient”。我宁愿将每个节点定义为GKSessionModeServer或GKSessionModeClient,因为我已经读到,如果对等节点位于GKSessionModePeer中,性能时间实际上会变慢,因为它必须同时完成客户

好的,我一直在尝试创建我自己的GKSession对象,委托方法在控制台中给了我一个错误,我还没有弄清楚如何修复这个错误。我想知道是否有人有任何建议或遇到过这个问题*请注意——变量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]; 
    }
}
整个错误代码是:

正在侦听端口56386 2009-06-30 10:31:41.892 GKTank[17756:20b]***由于未捕获的异常“GKValidargumentException”而终止应用程序,原因:“必须提供具有GKSessionModelPeer模式的有效GKSession对象,或者在-peerPickerController:sessionForConnectionType:的实现中创建默认GKSession对象返回“nil”。提供的对象为:发送了0个数据包:rush(0个数据包0个字节):REQUE(0个数据包0个字节):rtry(0个数据包0个字节):sack(0个数据包0个字节):会话模式下的当前加权平均rtt(0毫秒):0' 2009-06-30 10:31:41.893吉凯恩油罐[17756:20b]烟囱:( 807902715, 2452446779, 807986683, 807986522, 927035842, 927037074, 927038407, 815223834, 927038949, 9245, 8562, 814709201, 815110321, 815119058, 815114270, 814813151, 814722763, 814748641, 839148405, 807687520, 807683624, 839142449, 839142646, 814752238
)

我还没有真正使用GameKit实现任何东西,但只要看一下文档,似乎只有在使用GKSessionModelPeer时才能使用GKPeerPickerController。如果要使用GKSessionModeServer/Client,则需要直接使用会话及其委托。请参阅《游戏工具包编程指南》中关于和的部分

您的主要功能将围绕gksessionelegate方法展开
-会话:对等:didChangeState:
在客户端和服务器模式下,以及

-acceptConnectionFromPeer:error:
-denyConnectionFromPeer:
处于服务器模式。

如果您发布了收到的错误,将非常有用。抱歉,我现在用错误代码编辑了文章。如果我同时运行GKSession到GKSessionModelPeer的配置,它实际上是有效的,但我正试图避免这样做。我宁愿将会话指定为服务器模式或客户端模式。我想知道这是不是现在就有可能(刚出来的地方,代码中可能有一些bug??)或者是我的代码?我也不知道答案,但是你有没有测试过,看看它是否真的在任何方面变慢了?如果您只是读过它的速度较慢,但实际上没有看到它对性能的影响,那么这很可能是过早的优化。也就是说,看看你的测试出了什么问题会很有趣。