Фон:
Все мои методы OpenTok находятся в одном ViewController
, который попадает в поле зрения, как типичные отношения VC. Деталь VC соединяет вас с другой комнатой в зависимости от вашего выбора. Когда я нажимаю кнопку "Назад", чтобы отобразить представление, я получаю сбой (возможно, 1 из 7 раз):
[OTMessenger setRumorPingForeground] message sent to deallocated instance xxxxx
или
[OTSession setSessionConnectionStatus:]: message sent to deallocated instance 0x1e1ee440
Я помещаю свои методы публикации/отключения в viewDidDisappear:
-(void)viewDidDisappear:(BOOL)animated{
//dispatch_async(self.opentokQueue, ^{
[self.session removeObserver:self forKeyPath:@"connectionCount"];
if(self.subscriber){
[self.subscriber close];
self.subscriber = nil;
}
if (self.publisher) {
[self doUnpublish];
}
if (self.session) {
[self.session disconnect];
self.session = nil;
}
//});
[self doCloseRoomId:self.room.roomId position:self.room.position];
}
Вот трассировка:
Вот DetailViewController на Github: ссылка здесь
Как воспроизвести:
-
Сделайте выбор из MasterVC, который приведет вас к DetailVC, который сразу же пытается подключиться к сеансу и опубликовать
-
Вернитесь к предыдущему, MasterVC быстро, обычно до того, как у сеанса была возможность опубликовать поток
-
Попробуйте это несколько раз, и в конце концов он сработает.
-
Если я замедляю и позволяю издателю возможность подключаться и публиковать, он вряд ли вызовет сбой.
Ожидаемый результат:
Он должен просто отключиться от сеанса/отменить публикацию и начать новый сеанс, когда я иду туда и обратно между Master/DetailVC.
Другое:
Какое у вас устройство и версия ОС? iOS 6
В какой тип подключения вы были? Wi-Fi
Зомби включены? Да
Включено ARC? Да
Делегаты установлены на нуль? Да, насколько я знаю
Любая помощь, решающая этот крах, будет с благодарностью оценена. Возможно, мне не хватает чего-то основного, которого я просто не вижу.
Похоже, что объект OTSession в библиотеке OpenTok продолжает отправлять сообщения объектам в этой библиотеке, которые с тех пор были освобождены путем переключения представлений. В библиотеке есть метод [session disconnect], который отлично работает, если вы даете ему достаточно времени, но занимает около 2-3 секунд, и это длительное время, чтобы приостановить приложение между представлениями.
Это может быть глупый вопрос, но: Есть ли способ остановить все процессы, инициированные определенным VC?