【问题标题】:GameKit on 4.0 not ready for primetime? Stopping advertising servicesGameKit 4.0 还没有准备好迎接黄金时段?停止广告服务
【发布时间】:2011-03-13 17:38:12
【问题描述】:

在 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 下运行良好,但在 Gamekit 4.0 的当前状态下,我无法再提交它。非常失望,因此希望此错误报告对将来有所帮助。如果有人理解这个错误或我可能做错了什么,我将不胜感激。

如果可以,请提供帮助。我将在此应用程序上认输,它是如此接近。

【问题讨论】:

  • 实际上刚刚收到来自 Apple 的消息,这是一个已知错误。任何变通方法都会获得奖励。
  • 检查它是否在 4.1 的 beta 中得到修复。您可能只需要等待几周即可提交。 (仅限 4.1 和 3-3.2)。
  • 4.1 修复了该错误。我昨晚反对它。麻烦的是,通知断开连接仍然需要 15-30 秒。还是有些不对劲。虽然进步!你应该回答的!您的“尝试 4.1”答案可能会为您带来 500 个代表;)

标签: iphone bluetooth gamekit ios


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我的建议是使用 4.1 的最终预发布版本并报告“新”问题(重新打开未修复的现有错误或创建新错误)。恕我直言,您最好的选择是在最终版本发布之前完全解决问题或 Apple 的体面工作。

    【讨论】:

    • 是的,可悲的是,我不得不咬紧牙关。享受你的500! :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    相关资源
    最近更新 更多