MultipeerConnectivity - MCNearbyServiceBrowser不断发现断开连接的对等体 [英] MultipeerConnectivity - MCNearbyServiceBrowser constantly finding disconnected peers

查看:264
本文介绍了MultipeerConnectivity - MCNearbyServiceBrowser不断发现断开连接的对等体的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 MultipeerConnectivity Apple框架。连接,广告客户和浏览器似乎一直运行到现在,但我注意到,当我的任何会话连接一个对等端然后它因任何原因断开连接我的 MCNearbyServiceBrowser 仍然发现该对等点如果它不存在了显然 MCSession 报告与对等方的未连接状态。

I´m working with MultipeerConnectivity Apple framework. Connection, advertiser and browser seems to work very well until now but I notice that when my any session connects a peer an then it disconnects for any reason my MCNearbyServiceBrowser still finding that peer even if it doesn´t exist anymore. Obviously MCSession reports a not connected status with the peer.

有没有人知道为什么会这样?

Does anyone has an idea of why this is happening?

我已经覆盖了我的mc中的dealloc方法这样的处理程序类:

I have override the dealloc method in my mc handler class like this:

- (void)dealloc
{
    [self.session disconnect];

    self.peerId = nil;

    self.session    = nil;
    self.browser    = nil;
    self.advertiser = nil;

    self.session.delegate    = nil;
    self.browser.delegate    = nil;
    self.advertiser.delegate = nil;
}

我还有一个拆卸方法:

- (void)teardownService
{
    [self.session disconnect];

    self.session    = nil;
    self.advertiser = nil;
    self.browser    = nil;

    self.session.delegate    = nil;
    self.browser.delegate    = nil;
    self.advertiser.delegate = nil;
}

所有设备都会出现此问题。

This issue happen with all the devices.

推荐答案

我在Apple Dev论坛上找到了一个非常有用的答案。

I found a really helpful answer at the Apple Dev Forums.

这里有链接

基本上解决了这个问题的是回收 MCPeerID 。创建对象后,我将其序列化并存储在 NSUserDefaults 中。无论什么时候我需要它,比如当我拆掉服务并再次启动它时,我会转到存储的对象并使用它而不是创建一个新的。

Basically what resolved this issue was recycling the MCPeerID. When the object is created I serialize it and stored in NSUserDefaults. And anytime I need it back, like when I tear down the service and start it again I go to the stored object and used it instead of creating a new one.

您可以在上面附带的链接中找到下一个示例代码:

You can find the next example code in the attached link above:

- (MCPeerID *)peerID {
    if (!_peerID) {
        _peerID = [MyClassName getRecycledPeerID];
    }
    return _peerID;
}

+ (MCPeerID *)getRecycledPeerID
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    // if peer id exists, use that; else create one
    if ([defaults objectForKey:kRECYCLED_PEER_ID]) {
        NSData *peerIDData = [defaults dataForKey:kRECYCLED_PEER_ID];
        return [NSKeyedUnarchiver unarchiveObjectWithData:peerIDData];
    }
    else {
        return [[MCPeerID alloc] initWithDisplayName:[UIDevice currentDevice].name];
    }
}

这篇关于MultipeerConnectivity - MCNearbyServiceBrowser不断发现断开连接的对等体的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆