我有以下情况:
WaitingVC
)。在应用程序启动时初始化MCNearbyServiceAdvertiser
对象,并在显示startAdvertisingPeer
时开始广告(WaitingVC
)。MCNearbyServiceBrowser
,也使用自定义用户界面(即不使用Apple提供的MCBrowserViewController
)。browser:foundPeer:withDiscoveryInfo:
被调用)。WaitingVC
。广告已停止(stopAdvertisingPeer
)。browser:lostPeer:
)。崩溃发生在队列com.apple.NSNetServices.tcplistener-queue
中。发布时dispatch_call_block_and_release
调用失败EXC_BREAKPOINT
。
我真的很想知道,如果这是MC框架中的一个错误;还是我错过了一些清理程序?同行 A 仅执行以下操作:
MCPeerID
,存储在强大的属性中MCNearbyServiceAdvertiser
,存储在强大的属性中,设置委托WaitingVC
:致电startAdvertisingPeer
,然后在完成后致电stopAdvertisingPeer
。无论我做什么,崩溃似乎都会发生。如果MCNearbyServiceAdvertiser
对象和MCPeerID
对象保留在WaitingVC
中并因此在WaitingVC
关闭后销毁,则崩溃仍然会发生。
除此之外,一切正常(邀请程序,连接,交换数据);但这几秒钟的某些失败窗口并不是真的可以接受。保持广告客户一直运行解决了这个问题,但它只是处理symtpom(这个“同步”功能在应用程序中很少使用,所以它也是一种矫枉过正的行为。)
更新
使用MCAdvertiserAssistant
时发生同样的崩溃,如果我在Peer A 上调用其stop
方法,并快速连接Peer B 。另外,我测试了本教程中的场景:http://techmaster.vn/2013/09/multipeer-connectivity-quick-tutorial/ - 结果是一样的:崩溃。所以我有一个强烈的怀疑,这是苹果方面的一个错误......
答案 0 :(得分:5)
我一直在经历同样的崩溃,并根据Dev论坛中的这个帖子,所以请其他人。已经为它创建了一个错误报告:
答案 1 :(得分:0)
这看起来像你的委托回调问题
advertiser:didReceiveInvitationFromPeer:withContext:invitationHandler:
最有可能的最后一个参数是invitationHandler块。这个方法被调用了吗?当B发生A崩溃时,必须有一些被调用的东西,这似乎是唯一可以想象的切入点。
答案 2 :(得分:0)
我找到了一个简单的解决方法。我在启动浏览器之前添加了延迟。
为了填写整个故事,我创建了一个用MCSession替换GKSession的包装器。该连接正在关闭并在特定情况下由两端同时重新打开,因此它崩溃了。向浏览器添加延迟开始将其从另一端的拆除中抵消,从而避免出现问题。