Отключение многорангового соединения

У меня возникают проблемы с подключением с помощью Multipeer Connectivity Framework в iOS7. В настоящее время мое приложение программно обрабатывает просмотр и рекламу с помощью MCNearbyServiceAdvertiser и MCNearbyServiceBrowser. У меня есть представление предупреждений, которое спрашивает пользователя, является ли он браузером или рекламодателем. По возвращении из этого представления я соответственно создаю экземпляр MCNearbyServiceAdvertiser или Browser.

#pragma - Alert Delegate
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 0)
    {
        _browser = [[MCNearbyServiceBrowser alloc]initWithPeer:_peerID serviceType:@"Context-xl"];
        [_browser setDelegate:self];
        [self.detailViewController setRemote:YES];
        [_browser startBrowsingForPeers];
    } else
    {
        _advertiser = [[MCNearbyServiceAdvertiser alloc]initWithPeer:_peerID discoveryInfo:nil serviceType:@"Context-xl"];
        [_advertiser setDelegate:self];
        [self.detailViewController setRemote:NO];
        [_advertiser startAdvertisingPeer];
    }
    [self.detailViewController configureView];
}

Мой метод делегата сеанса peer:...DidChangeState... вызывается дважды, один раз для подключения и снова для отключения. Я вообще не останавливаю рекламодатель или браузер после начала сеанса. Должен ли я прекратить просмотр/рекламу?


person Corey Zambonie    schedule 30.09.2013    source источник
comment
Я продолжал работать над этим. Я подумал, что, возможно, установка точек останова приводила к отключению устройств, что, похоже, и было на самом деле. Однако устройства не остаются подключенными при нормальной работе.   -  person Corey Zambonie    schedule 02.10.2013
comment
У меня такая же проблема. Устройства подключаются на некоторое время, затем отключаются и не будут оставаться подключенными или повторно подключаться.   -  person James Andrews    schedule 19.10.2013
comment
Это часто случалось, когда я выполнял передачу файлов с использованием метода sendData:ToPeer MCSession. С тех пор я переключился на открытие потока с помощью метода startStream:withName, и устройства оставались подключенными.   -  person Corey Zambonie    schedule 21.10.2013
comment
возможный дубликат Почему мой одноранговый узел MCSession отключается случайным образом?   -  person Andrew Cone    schedule 31.10.2013
comment
Я также получаю случайные отключения, даже если не в фоновом режиме или в точках останова. Кто-нибудь нашел решения?   -  person jjxtra    schedule 30.11.2013


Ответы (1)


РЕДАКТИРОВАНИЕ Обратились в службу поддержки Apple, и они подтвердили, что вызов sendData со слишком большим объемом данных или слишком частый вызов может привести к разрыву связи.

EDIT Моя гипотеза заключается в том, что у Apple есть поток или очередь, которая опрашивает, чтобы проверить, подключены ли одноранговые узлы. Если этот поток/очередь останавливается (т. е. срабатывает точка останова, или приложение привязывает ЦП или делает что-то, что занимает некоторое время в основном потоке), кажется, что это вызывает отключение.

Создание моего сеанса без шифрования, похоже, помогло производительности и с отключениями, хотя они все еще случаются.

MCPeerID* peerId = [[MCPeerID alloc] initWithDisplayName:self.displayName];
self.peer = [[MultiPeerPeer alloc] initWithDisplayName:peerId.displayName andPeer:peerId];
self.session = [[MCSession alloc] initWithPeer:peerId securityIdentity:nil encryptionPreference:MCEncryptionNone];

Кроме того, я обнаружил, что слишком частый вызов sendData (более 30-60 раз в секунду) может привести к тому, что фреймворк перейдет в плохое состояние и вызовет зависания и отключения.

person jjxtra    schedule 30.11.2013
comment
На самом деле я разговаривал с инженером Apple, который работал над многоуровневым подключением, и они подтвердили, что слишком частый вызов sendData может привести к проблемам. Может iOS 8 это исправит, посмотрим... - person jjxtra; 28.05.2014
comment
Эй, приятно знать. У вас есть ссылка на тикет в службу поддержки? - person Omer; 04.01.2016
comment
@ Омер, к сожалению, электронное письмо было удалено. - person jjxtra; 04.01.2016