MCNearbyServiceBrowserDelegate foundPeer在切换时报告给定广告商设备的不同PeerId,然后切换回浏览设备

问题描述 投票:0回答:3

iOS Multipeer连接问题...

我的应用程序使用MCNearbyServiceBrowserMCNearbyServiceAdvertiser(但不能在给定设备上同时使用)。

我的MCNearbyServiceAdvertiser总是使用相同的PeerId ...我将它存储在NSUserDefaults中,根据2014年WWDC会议的建议。

当另一台设备正在浏览服务时,浏览设备会按预期获得foundPeer浏览器委托回调。

但是,如果在浏览设备上我切换离开我的应用程序(例如,通过主页按钮点击),然后切换回我的应用程序,我再次拨打foundPeer广告设备,但这次PeerId与众不同!

这看起来很奇怪,因为我的广告客户总是使用相同的PeerId。

任何想法为什么会这样?意外?

(我打算看看一个新发现的具有给定PeerId的广告设备是否已经在我对广告商的表格视图中,但上述问题有点混淆了该计划。)

谢谢。

-All

ios ios7 multipeer-connectivity
3个回答
0
投票

来自apple docs:“Multipeer Connectivity框架负责创建代表其他设备的对等对象。”

按下主页按钮并切换回应用程序后,框架创建了一个新的PeerID对象来表示广告设备。这是前一个对象,即使它代表相同的广告设备。所以你不能依赖PeerID对象相等。


0
投票

为了正确识别对等体,我建议您创建一个NSUUID字符串并将其存档在磁盘上并重用它。初始化MCPeerID对象时,您应该传递的显示名称将是displayName + UUID。使用UI元素的显示名称和UUID来识别对等体。

我希望它有所帮助。


0
投票

从同一显示名称创建两个时,您将无法获得相同的MCPeerID。当您发生名称冲突时,这可确保唯一性。将设备名称用作显示名称是很常见的。不是每个人都对他们个性化。

如果要识别并被先前连接的对等体识别,则必须保存并检索实际的MCPeerID。

要查看我的意思,请将以下代码粘贴到游乐场并运行它。

import MultipeerConnectivity

let hostName = "TestPlaygroundHostName"

let firstPeerID = MCPeerID(displayName: hostName)
let secondPeerID = MCPeerID(displayName: hostName)

firstPeerID.hashValue == secondPeerID.hashValue
© www.soinside.com 2019 - 2024. All rights reserved.