GameKit 4.0尚未准备好迎接黄金时段?停止广告服务

时间:2010-07-09 07:04:34

标签: iphone bluetooth gamekit ios

在4.0下运行的Gamekit应用程序无法正确处理删除GKSession对象。在3.1.3或3.2下运行,如果对等方断开连接并清理会话(如在Apple演示中):

[gkSession disconnectFromAllPeers];
[gkSession setAvailable:NO];
[gkSession setDelegate:nil];
[gkSession setDataReceiveHandler:nil withContext:nil];

然后其他对等体接收状态变化,并且可以更新对等体的表视图。

在我的应用程序中,一个对等体作为服务器启动,另一个作为客户端启动。客户端请求连接到服务器,客户端的名称显示在服务器的播放器列表中。如果服务器选择接受请求,则建立会话连接并且他们可以玩游戏。但是,如果客户端在服务器接受请求之前退出,则客户端清除会话(如上所述),并且客户端在响应中(当它收到状态更改时)从服务器的对等列表中消失。这在3.1-3.2

上非常有效

当你运行在4.0下运行的同一个应用程序时,服务器和客户端会抛出一个错误,同行需要很长时间才能收到状态更改,而当它们执行时,应用程序崩溃没有任何错误(即使使用NSZombieEnabled =构建参数中的YES)。服务器永远不会从客户端收到“状态更改”消息。相反,抛出以下错误:

Thu Jul  8 23:27:26 unknown com.apple.mDNSResponder[18] <Notice>: BTLocalDeviceRemoveData: 60 byte key, 18 byte value
Thu Jul  8 23:27:26 unknown MobileBluetooth[29] <Notice>: BTLocalDeviceRemoveData - BT_ERROR_INVALID_HANDLE
Thu Jul  8 23:27:26 unknown com.apple.mDNSResponder[18] <Notice>: Call to BTLocalDeviceRemoveData failed with error 7
Thu Jul  8 23:13:39 unknown mDNSResponder[18] <Error>: external_stop_advertising_service:   18 00Z1Tud0A\\.\\.Tonberry\M-b\M^@\M^Ys\\032iPhone._1htnu3uko0uvsp._udp.local. TXT txtvers=1\M-B\M-&state=A
Thu Jul  8 23:13:39 unknown MobileBluetooth[29] <Notice>: BTLocalDeviceRemoveData - BT_ERROR_INVALID_HANDLE

我认为是关键错误:

Tue Jul 13 21:04:50 Tonberry com.apple.mDNSResponder[21] <Notice>: Call to BTDiscoveryAgentStopScan failed with error 400

让我觉得会话没有变得不可用(停止宣传服务时出错)。实际崩溃:

Thread 3 Crashed:
0   GameKitServices                 0x06352f90 gckSessionChangeStateCList + 411
1   GameKitServices                 0x0635b49c gckSessionRecvProc + 1474
2   libSystem.B.dylib               0x981c181d _pthread_start + 345
3   libSystem.B.dylib               0x981c16a2 thread_start + 34

我已在我的完整申请中提交了一个错误。应用程序本身已经完成,几乎已经准备好提交并在3.1.3 / 3.2下运行良好但是在4.0的Gamekit当前状态下我无法再提交它。非常失望,希望这个错误报告在未来有所帮助。如果有人理解这个错误或我可能做错了什么,我会非常感激。

如果可以,请帮忙。我打算在这个应用程序中放弃它,它非常接近。

2 个答案:

答案 0 :(得分:1)

我的建议是使用4.1的最终预发布版本并报告“新”问题(重新打开现有错误,如未修复或创建新错误)。这是恕我直言,你最好的办法是在最终版本发布之前完全修复问题,或者从Apple那里得到一个体面的工作。

答案 1 :(得分:1)

对于那些寻求帮助的人,我找到了解决4.0.x问题的解决方法(4.1解决了崩溃但不是断开连接时间)。只需自动接受一切。当有人通过connectToPeer:请求GameKit连接时,请接受它。不要让用户选择它。断开对等体与已建立连接的连接会立即通知服务器。如果将它们保持在“可用”状态,当它们离开连接时,它将使服务器崩溃。尽早联系并经常接受!