iOS MCBrowserViewController 卡在 "Searching..."

iOS MCBrowserViewController stuck on "Searching..."

我正在尝试使用广告商助手和浏览器视图控制器来实现 iOS Multipeer Connectivity 框架。这看起来很简单,但浏览器从未找到我的其他设备。这是代码:

@property (nonatomic, strong) MCSession *peerSession;

- (void)startSession {
    MCPeerID *peerId = [[MCPeerID alloc] initWithDisplayName:[[UIDevice currentDevice] name]];
    self.peerSession = [[MCSession alloc] initWithPeer:peerId];
    self.peerSession.delegate = self;

    MCAdvertiserAssistant *advertiser = [[MCAdvertiserAssistant alloc] initWithServiceType:@"myapp" discoveryInfo:nil session:self.peerSession];
    [advertiser start];
}

- (void)openBrowser {
    MCBrowserViewController *peerBrowser = [[MCBrowserViewController alloc] initWithServiceType:@"myapp" session:self.peerSession];
    peerBrowser.delegate = self;
    [self.appDelegate.mainViewController presentViewController:peerBrowser animated:TRUE completion:nil];
}

这是 运行 在两台 iOS 9.3 设备上,都打开了蓝牙,并连接到同一个 Wi-Fi 网络。浏览器 window 打开但显示 "Searching..." 并且从不显示其他设备。

我尝试 运行 仅在我尝试浏览的设备上使用广告商代码。我还尝试直接使用 MCNearbyServiceAdvertiser 和 MCNearbyServiceBrowser。两种变化都没有影响。

我没有找到任何讨论这个问题的网页,所以希望我遗漏了一些简单明了的东西!

您需要保留对 MCAdvertiserAssistant 的引用。它在 startSession 结束时超出范围,正在发布。

@property (nonatomic, strong) MCAdvertiserAssistant *advertiser;

- (void)startSession {
    MCPeerID *peerId = [[MCPeerID alloc] initWithDisplayName:[[UIDevice currentDevice] name]];
    self.peerSession = [[MCSession alloc] initWithPeer:peerId];
    self.peerSession.delegate = self;

    self.advertiser = [[MCAdvertiserAssistant alloc] initWithServiceType:@"myapp" discoveryInfo:nil session:self.peerSession];
    [self.advertiser start];
}