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

我正在使用iOS 7多对等技术来连接我的iPad和iPod touch。 但是,每当iPod touch或iPad进入hibernate状态,它将被断开连接,这是很好的,因为多对端不工作在后台模式,但是当我再次发现它显示在MCBrowserViewController列表中的iPod名称两次。 试了每个示例代码,每个代码都有同样的问题,任何人都知道如何解决这个错误。

也有一个奇怪的问题与MCBrowserViewController如果我连接设备和其他设备接受它,即使它被连接MCBrowserViewController仍然会显示为连接和"Done"button被禁用。 我使用MCBrowserViewController并没有自定义代码,所以我想这是苹果的问题。

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

两次发现同一个名字是因为每次初始化会话时都要“初始化”peerID(withDisplayName)。 从苹果的文档,这是一个已知的错误,你不应该这样做。 相反,将你的peerID保存在某个地方(比如NSUserDefaults),当你初始化会话时,validation是否存在peerID,加载它,否则创build/保存它。

最简单的代码如下所示:在会话初始化过程中,replace:

 _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"]]; } 

当然,你可以创build一个更复杂的代码,例如重新分配它,并在dynamicvariables中创build它,以防万一你想改名字等等。

我有同样的问题,这就是我解决它,在我的情况下,我用UIViewController来处理连接,每当我打开视图,我分配和初始化视图-viewDidLoad将被调用每次 – 然后在viewDidLoad我初始化MCPeerID&MCSession,这就是问题所在,这就是为什么我们看到多对等连接显示两次,所以我通过在AppDelegate或全局类中对MCPeerID&MCSession进行一次初始化来解决这个问题。