gpt4 book ai didi

ios - MultipeerConnectivity-MCNearbyServiceBrowser不断查找断开连接的对等

转载 作者:行者123 更新时间:2023-12-01 18:13:06 28 4
gpt4 key购买 nike

我正在使用 MultipeerConnectivity Apple框架。到目前为止,连接,广告客户和浏览器似乎都工作良好,但是我注意到,当我的任何 session 连接一个对等体时,无论出于什么原因,即使它不再存在,我的MCNearbyServiceBrowser仍会找到该对等体,因此它断开连接。显然MCSession报告了尚未与对等方连接的状态。

有谁知道为什么会这样吗?

我已经在我的mc处理程序类中重写了dealloc方法,如下所示:

- (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;
}

所有设备都会发生此问题。

最佳答案

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

这是link

解决此问题的基本方法是回收MCPeerID。创建对象后,我将其序列化并存储在NSUserDefaults中。而且无论何时我需要它,比如当我关闭服务并再次启动它时,我都会转到存储的对象并使用它,而不是创建一个新的对象。

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

- (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];
}
}

关于ios - MultipeerConnectivity-MCNearbyServiceBrowser不断查找断开连接的对等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26594740/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com