1

我已经进行了超过三天的研究来解决我的问题,但我还没有看到任何人能够解决我的问题。Browser 邀请 Advertiser,Advertiser 接受,MCSession 变为连接状态。但是,一旦 MCBrowserViewController 关闭(通过取消或完成按钮),MCSession 就会断开连接。只要我不关闭 MCBrowserViewController,MCSession 就会保持连接。我不明白它为什么或如何工作,我什至尝试过调试这个过程,但它太深入线程了,我无法理解。

请告诉我这只是我的代码有问题。

-(void)setUpMultiPeer{
    self.myPeerID = [[MCPeerID alloc] initWithDisplayName:pos];

    self.mySession = [[MCSession alloc] initWithPeer:self.myPeerID];

    self.browserVC = [[MCBrowserViewController alloc] initWithServiceType:@"svctype" session:self.mySession];

    self.advertiser = [[MCAdvertiserAssistant alloc] initWithServiceType:@"svctype" discoveryInfo:nil session:self.mySession];

    self.browserVC.delegate = self;

    self.mySession.delegate = self;


}

-(void)dismissBrowserVC{
    [self.browserVC dismissViewControllerAnimated:YES completion:nil];
}

-(void)browserViewControllerDidFinish:(MCBrowserViewController *)browserVC{
    [self dismissBrowserVC];
}

-(void)browserViewControllerWasCancelled:(MCBrowserViewController *)browserViewController{
    [self dismissBrowserVC];
}



-(void)session:(MCSession *)session peer:(MCPeerID *)peerID didChangeState:(MCSessionState)state{
    if (state == MCSessionStateConnected) {
        NSLog(@"Connected!");

        //Not entirely sure about this next line...
        self.mySession = session;
    }
    else if (state == MCSessionStateNotConnected){
        NSLog(@"Disconnected");
        dispatch_async(dispatch_get_main_queue(), ^(void) {
            UIAlertView *alert = [[UIAlertView alloc]initWithTitle: @"Somebody Left!"
                                                           message: [[NSString alloc] initWithFormat:@"%@", [peerID displayName]]
                                                          delegate: nil
                                                 cancelButtonTitle:@"Got it"
                                                 otherButtonTitles:nil];
            [alert show];
        });
    }
}

//Called by a UIButton
-(IBAction)browseGO:(id)sender {
    [self setUpMultiPeer];
    [self presentViewController:self.browserVC animated:YES completion:nil];
}

//Called by a UISwitch
-(IBAction)advertiseSwitch:(id)sender {
    if (_advertiseSwitcher.on) {
        [self setUpMultiPeer];
        [self.advertiser start];
    }
    else{
        [self.advertiser stop];
    }
}

我还尝试为每个浏览器和广告商使用唯一的 MCSession,但没有成功。

4

1 回答 1

0

我为解决我的问题所做的就是从零开始。等待 StackOverflow 和 Apple 开发者论坛的回答花费了太长时间,所以我回到了最开始的工作,我将再次从那里建立起来。

是我发现的一个很棒的教程的链接。我希望这可以帮助某人解决他们的问题。

但是,如果有人在问题中看到我的代码有任何完全错误的地方,请告诉我!我想知道是什么导致了这个错误,以便我可以从错误中吸取教训。

感谢您停下来阅读这个问题。

于 2014-01-26T18:58:33.407 回答