为什么多点连接仅适用于 MCAdvertiserAssistant 而不是 MCNearbyServiceAdvertiser

abb*_*ood 5 cocoa bonjour objective-c ios multipeer-connectivity

我跟着这个教程对MultiPeerConnectivity(MCF)和列表大部分在线教程,他们把使用的服务的快捷MCAdvertiserAssistant和MCBrowserViewController

我尝试实施相同的教程,但使用MCNearbyServiceAdvertiser和MCNearbyServiceBrowser代替,因为我有兴趣在我的应用程序上自定义可发现性。

就列出附近的设备而言,一切正常。但问题开始于MCNearbyServiceAdvertiserDelegate我调用此方法的地方:

- (void)           advertiser:(MCNearbyServiceAdvertiser *)advertiser
 didReceiveInvitationFromPeer:(MCPeerID *)peerID
                  withContext:(NSData *)context
            invitationHandler:(void (^)(BOOL, MCSession *))invitationHandler {

    // Allow the peer to join this Vibereel
    MCSession *peerSession = [[MCSession alloc] initWithPeer:_peerID];
    peerSession.delegate = self;
    invitationHandler(YES, peerSession);
    NSLog(@"Accepted entry request for peer %@", [peerID displayName]);
}
Run Code Online (Sandbox Code Playgroud)

这并不会触发的确发生了变化状态的方法:

-(void)session:(MCSession *)session peer:(MCPeerID *)peerID didChangeState:(MCSessionState)state
Run Code Online (Sandbox Code Playgroud)

虽然它与原始版本。

我知道我显然需要添加更多代码来演示问题..所以我创建了一个以原始代码开头的github 存储库。这是提交与定制的UITableViewController来显示附近的设备(正常工作)沿增加了定制的浏览器,这里是承诺,做的广告(不工作)

Pet*_*ema 4

使peerSession成为类的属性而不是方法的局部变量。问题是在您的代码中,peerSession 在方法结束时被释放。我的博客上有一个工作示例。