【发布时间】:2009-06-30 14:30:48
【问题描述】:
好的,我一直在尝试创建自己的 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] *** 由于未捕获的异常“GKInvalidArgumentException”而终止应用程序,原因:“必须提供具有 GKSessionModePeer 模式的有效 GKSession 对象,或创建默认 GKSession对象在 -peerPickerController:sessionForConnectionType: 的实现中返回“nil”。提供的对象是:发送 0 个数据包:rush(0 个数据包 0 字节):依赖(0 个数据包 0 字节):rtry(0 个数据包 0 字节):sack(0 个数据包 0 字节):当前加权平均 rtt(0 毫秒)会话模式:0' 2009-06-30 10:31:41.893 GKTank [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 )
【问题讨论】:
-
如果您发布您遇到的错误将会很有帮助。
-
对不起,我现在用错误代码编辑了帖子。如果我为两者运行将 GKSession 配置为 GKSessionModePeer,它实际上是有效的,但我试图远离这种情况。我宁愿将会话指定为服务器模式或客户端模式。我想知道现在这是否可能(它刚刚出现的地方,代码中可能有一些错误吗??)还是我的代码?
-
我也不知道答案,但你有没有测试过它是否真的变慢了?如果您只是阅读它的速度较慢,但实际上并没有看到它对性能的影响,那么这很可能是过早的优化。也就是说,看看你的测试出了什么问题会很有趣。
标签: iphone objective-c cocoa-touch gamekit