背景:
我所有的 OpenTok 方法都在一个ViewController
被推送到视图中的方法中,就像典型的 Master/detail VC 关系一样。detailVC 根据您的选择将您连接到不同的房间。当我按下后退按钮以弹出视图时,我遇到了崩溃(可能 7 次中有 1 次):
[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];
}
这是一个跟踪:
这是 Github 上的 DetailViewController:链接在这里
如何重现:
从 MasterVC 中进行选择,这会将您带入 DetailVC,它会立即尝试连接到会话并发布
快速返回上一个,MasterVC,通常在会话有机会发布流之前
尝试多次,最终它会崩溃。
如果我放慢速度并让发布者有机会连接和发布,则不太可能导致崩溃。
预期结果:
当我在 Master/DetailVC 之间来回切换时,它应该只是断开会话/取消发布并开始一个新会话。
其他:
您的设备和操作系统版本是什么?iOS 6
您使用的是哪种类型的连接?无线上网
僵尸启用?是的
启用 ARC?是的
代表设置为零?是的,据我所知
任何解决此崩溃的帮助将不胜感激。也许我错过了一些我看不到的基本内容。
似乎发生的事情是 OpenTok 库中的 OTSession 对象继续向该库中的对象发送消息,这些对象已通过切换视图释放。该库有一个 [session disconnect] 方法,如果你给它足够的时间,它可以正常工作,但它需要接近 2-3 秒,而且在视图之间暂停应用程序的时间很长。
这可能是一个愚蠢的问题,但是:有没有办法停止某个 VC 启动的所有进程?