2016-05-25 2 views
0

Я пытаюсь реализовать инфраструктуру подключения iOS Multipeer Connectivity с помощью помощника рекламодателя и контроллера просмотра браузера. Это кажется простым, но браузер никогда не находит мое другое устройство. Вот код:iOS MCBrowserViewController застрял на «Поиск ...»

@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 и с Bluetooth включен, и подключен к той же сети Wi-Fi. Откроется окно браузера, но говорит «Поиск ...» и никогда не отображает другое устройство.

Я попытался запустить только код рекламодателя на устройстве, к которому я пытаюсь перейти. Я также попытался использовать MCNearbyServiceAdvertiser и MCNearbyServiceBrowser напрямую. Ни одно изменение не изменило ситуацию.

Я не нашел веб-страниц, обсуждающих эту проблему, поэтому, надеюсь, я пропустил что-то простое и очевидное!

ответ

1

Вам необходимо оставить ссылку на ваш 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]; 
} 
+0

Это было! Я думал, что мне не нужно свойство, потому что мне не нужно позднее обращаться к рекламодателю. Но имеет смысл, что рекламодатель уйдет без этого. – arlomedia

Смежные вопросы