背景:
我所有的OpenTok方法都在一个ViewController
中,该视图控制器被推入视图中,就像典型的主/细节VC关系一样。详细VC会根据您的选择将您连接到不同的房间。当我按下返回按钮以弹出视图时,可能会发生崩溃(大约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,该VC立即尝试连接到一个会话并发布。
迅速返回到之前的MasterVC,通常在该会话有机会发布流之前。
尝试重复几次然后它就会崩溃。
如果我放慢速度,让发布者有时间连接和发布,那么它就不太可能导致崩溃。
期望结果:
当我在Master/DetailVC之间来回切换时,它应该只是断开与会话/取消发布并启动一个新会话。
其他信息:
你的设备和操作系统版本是什么? iOS 6
你使用的是哪种类型的网络连接? wifi
Zombies已启用吗? 是的
ARC已启用吗? 是的
委托已设置为空吗? 是的,据我所知
如果您能帮助解决此崩溃问题,将不胜感激。也许我错过了一些基本的东西,看不到。
似乎发生的情况是OpenTok库中的OTSession对象继续向该库中已被释放的对象发送消息。如果您给它足够的时间,库中的[session disconnect]方法可以正常工作,但需要接近2-3秒钟的时间来暂停应用程序在视图之间切换。
这可能是一个愚蠢的问题,但是: 有没有办法停止特定VC启动的所有进程?