iOS多对等连接显示两次相同的设备名称

我正在使用iOS 7多对等技术连接我的iPad和iPod touch.但是每当iPod touch或iPad进入睡眠状态时它就会断开连接,这很好,因为多个对等设备不能在后台模式下工作,但是当我再次发现它在MCBrowserViewController列表中显示两次iPods名称时.尝试使用每个示例代码并且每个代码都有相同的问题,任何人都知道如何修复此错误.

如果连接设备而其他设备接受它,MCBrowserViewController也会出现一个奇怪的问题,即使它已连接,MCBrowserViewController仍将显示为连接,并且“完成”按钮被禁用.我正在使用MCBrowserViewController而没有自定义代码,所以我想这是来自苹果的问题.

当应用程序从睡眠模式恢复到活动状态时,任何人都知道如何直接连接到设备?

最佳答案 两次发现相同的名称是因为每次启动会话时都会“初始化”peerID(withDisplayName).

从苹果的文档来看,这是一个已知的错误,你不应该这样做.相反,在某处保存您的peerID(例如NSUserDefaults),并在初始化会话时验证peerID是否存在,加载它,否则创建/保存它.

最简单的代码如下所示:
在会话的init中,替换:

_peerID = [[MCPeerID alloc] initWithDisplayName:XXX];

通过:

//If there is no PeerID save, create one and save it
if ([[NSUserDefaults standardUserDefaults] dataForKey:@"PeerID"] == nil)
{
    _peerID = [[MCPeerID alloc] initWithDisplayName:XXX];
    [[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:_peerID] forKey:@"PeerID"];
}
//Else, load it
else
{
    _peerID            = [NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] dataForKey:@"PeerID"]];
}

当然,您可以创建更复杂的代码,例如解除分配并从动态变量创建它,以防您想要更改名称等.

点赞