【问题标题】:iOS Multi peer connectivity showing same device name twiceiOS 多对等连接显示相同的设备名称两次
【发布时间】:2014-06-07 18:23:12
【问题描述】:

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

如果我连接一个设备并且其他设备接受它,MCBrowserViewController 还会出现一个奇怪的问题,即使它已连接,MCBrowserViewController 仍将显示为正在连接并且"Done" 按钮被禁用。我正在使用MCBrowserViewController,没有自定义代码,所以我猜这是苹果的问题。

还有谁知道当应用从睡眠模式回到活动状态时如何直接连接到设备?

【问题讨论】:

    标签: ios objective-c cocoa-touch ios7 multipeer-connectivity


    【解决方案1】:

    发现您的同名两次是因为您每次启动会话时都会“初始化”peerID (withDisplayName)。 从苹果的文档来看,这是一个已知的错误,你不应该这样做。相反,将您的 peerID 保存在某个地方(例如 NSUserDefaults),然后在您启动会话时,验证 peerID 是否存在,加载它,否则创建/保存它。

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

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

    当然,您可以编写更复杂的代码,例如释放它并​​从动态变量创建它,以防您想更改名称等。

    【讨论】:

    • 这段代码运行良好,但是当你用 swift 编写时它会产生问题
    【解决方案2】:

    我遇到了同样的问题,我就是这样解决的, 在我的情况下,我使用 UIViewController 来处理连接,每次打开视图时,我都会分配并初始化视图 -viewDidLoad 每次都会被调用,然后在 viewDidLoad 中我初始化 MCPeerID 和 MCSession ,这就是问题所在,这就是为什么我们看到多点连接显示了两次,所以我通过在 AppDelegate 或全局类中只初始化一次 MCPeerID 和 MCSession 来解决它。

    【讨论】:

      猜你喜欢
      • 2013-10-03
      • 1970-01-01
      • 2019-09-02
      • 1970-01-01
      • 1970-01-01
      • 2017-12-27
      • 2020-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多