我有以下情况:
- 对等点A在自定义 UI 中等待邀请(我们称之为
WaitingVC
)。MCNearbyServiceAdvertiser
对象在应用程序启动时被初始化,广告在出现时开始(startAdvertisingPeer
)WaitingVC
。 - 对等B已
MCNearbyServiceBrowser
启动并运行,也具有自定义 UI(即,不使用 Apple 提供的MCBrowserViewController
)。 - 对等点B找到对等点A(
browser:foundPeer:withDiscoveryInfo:
被调用)。 - 同时 Peer A选择关闭
WaitingVC
. 广告停止(stopAdvertisingPeer
)。 - 在 Peer B发现 Peer A丢失(
browser:lostPeer:
即被调用)之前,有几秒钟的延迟。 - 如果在这几秒钟内,Peer B选择邀请 Peer A(似乎仍可用于 Peer B),则 Peer A崩溃(是的,被邀请的,通常停止广告)。
- Peer B的邀请正常超时,没有问题出现。
崩溃发生在 queue 中com.apple.NSNetServices.tcplistener-queue
。调用在释放 ( )dispatch_call_block_and_release
时失败。EXC_BREAKPOINT
我真的想知道,这是否是 MC 框架中的错误;还是我错过了一些清理程序?对等体A仅执行以下操作:
- 应用程序委托:创建一个
MCPeerID
, 存储在一个强属性中, - 应用程序委托:创建一个
MCNearbyServiceAdvertiser
,存储在一个强属性中,设置委托, - 在
WaitingVC
:调用startAdvertisingPeer
,然后stopAdvertisingPeer
在完成时调用。
无论我做什么,似乎都会发生崩溃。如果MCNearbyServiceAdvertiser
对象和MCPeerID
对象在关闭后被保留WaitingVC
并因此被销毁WaitingVC
,崩溃仍然会发生。
除此之外,一切正常(邀请程序、连接、交换数据);但是对于某些故障,这几秒钟的窗口并不是真的可以接受的。让广告商一直运行可以解决这个问题,但它只是处理症状(而且这种“同步”功能很少在应用程序中使用,所以它也是一种过度杀伤力)。
更新:
如果我在 Peer AMCAdvertiserAssistant
上调用其stop
方法并在 Peer B上快速连接,则使用时会发生同样的崩溃。此外,我在本教程中测试了场景:http: //techmaster.vn/2013/09/multipeer-connectivity-quick-tutorial/ - 结果是一样的:崩溃。所以我有一个强烈的怀疑,这是苹果方面的一个错误......