代码之家  ›  专栏  ›  技术社区  ›  typeoneerror

4.0游戏套件还没有准备好进入黄金时间?停止广告服务

  •  3
  • typeoneerror  · 技术社区  · 15 年前

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

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

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

    在我的应用程序中,一个对等点作为服务器启动,另一个作为客户机启动。客户端请求连接到服务器,并且客户端的名称出现在服务器的播放器列表中。如果服务器选择接受请求,会话连接就建立起来,他们就可以玩游戏了。但是,如果客户机在服务器接受请求之前退出,则客户机将清理会话(如上所述),客户机将作为响应从服务器的对等列表中消失(当它接收到状态更改时)。这在3.13.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
    

    2 回复  |  直到 15 年前
        1
  •  1
  •   Pascal Thivent    15 年前

    我的建议是使用4.1的最终预发布版本,并报告“新”问题(或者将现有的bug作为未修复的bug重新打开,或者创建一个新的bug)。这是你最好的办法,让问题完全解决之前,最终发行或体面的工作从苹果周围。

        2
  •  1
  •   typeoneerror    15 年前