Интересно, готова ли эта платформа Multipeer Connectivity для использования в реальном мире, учитывая все ошибки, с которыми сталкивается сообщество. Я думаю, что я настроил это правильно, но все другие примеры проектов, которые я пробовал, сталкиваются с подобными проблемами.
Проблема, с которой я столкнулась, может быть связана с какой-то проблемой, присущей Bonjour или чему-то, я не могу понять, но в основном проблема такова:
- У меня есть активный
MCSession
с несколькими одноранговыми узлами. - Теперь, если устройство находится в сеансе, а затем принудительно завершает работу, этот "равный" остается подключенным на неопределенный промежуток времени.
- Я ничего не могу сделать, чтобы отключить этого пользователя, хотя метод
browser:lostPeer:
вызывается для этого однорангового узла и больше не отображается в браузере как "Ряд". - Метод
session:peer:didChangeState:
не вызывается для этого однорангового узла. - Когда этот сверстник покинул эту команду, возвращается в приложение, они снова "Найдены"
browser:foundPeer:withDiscoveryInfo:
, но все еще существуют вsession.connectedPeers
NSArray. Очевидно, что они не получают никаких данных или обновлений о сеансе и фактически не подключены. - Единственное, что, похоже, работает, чтобы зарегистрировать этот оригинальный peer как
MCSessionStateNotConnected
для сеанса, путем повторного подключения этого однорангового узла к исходному сеансу. Затем происходит повторный вызовsession:peer:didChangeState:
, где новый экземпляр peerID равенMCSessionStateConnected
и вскоре после старого экземпляра вызовов peerID сMCSessionStateNotConnected
.
Пример чат-приложения демонстрирует эту проблему: https://developer.apple.com/library/ios/samplecode/MultipeerGroupChat/Introduction/Intro.html
Поскольку, похоже, не существует способа вручную принудительно удалить одноранговый узел из сеанса, что мне делать? Должен ли я как-то попробовать и перестроить сеанс?
Эта структура кажется немного беспорядочной, но я пытаюсь зарезервировать решение!