AnyChat技术支持论坛

标题: 退出房间时崩溃 [打印本页]

作者: anhuijhy    时间: 2013-8-21 19:53
标题: 退出房间时崩溃
你好

我看到之前的人也有累世问题,我照着做了修改。有些不明白的地方所以问一下:
我的大致流程是:
1.刚登录用的是一下方法
  videoChatController = [[VideoChatController alloc] init];
    videoChatController.view.frame = self.view.bounds;
    [videoChatController initLunchBody:self.lunchMeetBody];
    iCurrentChatUserId = -1;
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(AnyChatNotifyHandler:) name:@"ANYCHATNOTIFY" object:nil];
    anychat = [[AnyChatPlatform alloc] init];
    anychat.notifyMsgDelegate = self;
    anychat.textMsgDelegate = self;

    [AnyChatPlatform InitSDK:0];
    [self loginAnyChat];

退出时
-(void)leaveRoom{
    //我将自己的视屏和对方的分开了
    if (isVideoChat) {
        [videoChatController FinishLocalVideoChat];
        [videoChatController FinishOtherVideoChat];
    }
    else{
        ZNLog(@"the model s %d %d",isWordChat,isVideoChat);
           [videoChatController FinishLocalVideoChat];
    }

    [AnyChatPlatform LeaveRoom:-1];
    iCurrentChatUserId = -1;
    [self performSelector:@selector(leaveRoomStep2) withObject:nil afterDelay:0.3];
}


-(void)leaveRoomStep2{


    [AnyChatPlatform Logout];
    //    [self showLoginView];

    //   [anychat release];
//   [AnyChatPlatform Release];

}
刚开始我把 [AnyChatPlatform Release]; 加上的 但第二次退出时就Crash了,看了你们的帖子说在app退出时再释放资源 所以我把它放到
- (void)applicationWillTerminate:(UIApplication *)application
{

    [AnyChatPlatform Release];

    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.

}
再次进入时流程同上 请问 我的流程有问题吗另外 一开始时候初始化的anychat 同样能释放 否则在进入时也进入不了


作者: admin    时间: 2013-8-21 21:06
您好,您的代码中是否加上了关闭本地摄像头“UserCameraControl(-1, 0)”的操作?
作者: anhuijhy    时间: 2013-8-21 22:38
     
加了
[videoChatController FinishLocalVideoChat];
  [videoChatController FinishOtherVideoChat];
一个是自己的 一个人是别人的
作者: anhuijhy    时间: 2013-8-21 22:40
这个方法在leaveroom 里面 另外我上树的整个逻辑对吗
作者: admin    时间: 2013-8-21 22:45
第二次退出时就Crash
请将Crash时的堆栈信息贴出来我们分析一下,谢谢。

另外是否加上了下面的方法:

  1. - (void) OnLocalVideoRelease:(id)sender
  2. {
  3.     if(self.localVideoSurface)
  4.     {
  5.         self.localVideoSurface = nil;
  6.     }
  7. }
复制代码

作者: admin    时间: 2013-8-21 22:48
这个帖子和您的问题比较类似:http://bbs.anychat.cn/forum.php? ... &extra=page%3D1,后面该客户通过修改代码已经解决该问题。
作者: anhuijhy    时间: 2013-8-21 22:49
这个方法是有  没在意由谁调起这个方法的 呵呵 我现在在家里 没环境 明天把crash的贴出来
作者: admin    时间: 2013-8-21 22:54
您好,请问编译我们的标准示例程序然后运行,是否会Crash?
作者: anhuijhy    时间: 2013-8-21 22:55
哈哈哈 我就是看了这个贴子才把anychatplatform release 放到- (void)applicationWillTerminate:(UIApplication *)application里了这个帖子还说“整个系统只需要一次初始化(Init)和一次资源释放(Release),所以您在第一次进入房间,然后离开房间(LeaveRoom)之后,是不需要释放SDK资源的(Release),在离开房间(LeaveRoom)之后,可以再次调用进入房间(EnterRoom)的API接口。释放SDK资源(Release)只需要在整个APP退出时才需要调用。”  这样我上面的贴出的代码还是有问题  我每次进都 执行    anychat = [[AnyChatPlatform alloc] init];
    anychat.notifyMsgDelegate = self;
    anychat.textMsgDelegate = self;

    [AnyChatPlatform InitSDK:0];
    [self loginAnyChat];
作者: anhuijhy    时间: 2013-8-21 22:57
换句话说 我第一次进的时候记录一下 下次再进的时候如果判断已经进过了 就直接enterroom 了
作者: admin    时间: 2013-8-21 23:07
很可能还是逻辑上有点小问题,明天修改一下然后再调试看看。
作者: anhuijhy    时间: 2013-8-21 23:30
我又看了一下demo 和相关的帖子 我把我的意思问再澄清一下。当我从一个房间进入时然后退出后 ,再次进入该房间活者其他房间的概率不是很大 因为anychat是嵌在app里的 所以我想把能释放的都释放了 。现在再次进入的时是我想看一下 万一再次进入的效果。所以 我退出时的步骤如下:1.释放自己和对方的摄像头和MIC  2.   [AnyChatPlatform LeaveRoom:-1]; 3.按照帖子建议等一下 [AnyChatPlatform Logout];  如果我写anychat release下次进来时就crash 如果不写好像没问题。 按照我的逻辑所以每次进入房间的之前都执行了  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(AnyChatNotifyHandler:) name:@"ANYCHATNOTIFY" object:nil];
    anychat = [[AnyChatPlatform alloc] init];
    anychat.notifyMsgDelegate = self;
    anychat.textMsgDelegate = self;

    [AnyChatPlatform InitSDK:0];
    [self loginAnyChat];
作者: anhuijhy    时间: 2013-8-21 23:32
嗯 好的  明天再梳理梳理
作者: anhuijhy    时间: 2013-8-22 09:28
你好。这是crash时候的情况
如果我把AnychatPlatform Release 去掉就没问题了如图

作者: admin    时间: 2013-8-22 11:09
您好,根据您的Crash信息,我们对代码做了一些调整,请重新下载SDK包(解压后应为r3608版本),更新里面的.a库,然后再测试看看是否能解决该问题?
作者: anhuijhy    时间: 2013-8-22 11:24
谢谢,另外想问一下进入房间后如何获取所有在线用户的speaker (群聊),只能遍历所有用户逐个用 UserSpeakControl吗 ?关闭时也需要这样?
作者: admin    时间: 2013-8-22 11:27
另外想问一下进入房间后如何获取所有在线用户的speaker (群聊),只能遍历所有用户逐个用 UserSpeakControl吗

是的,遍历所有用户,然后逐个请求。
作者: anhuijhy    时间: 2013-8-22 11:38
你好 。没有问题了。(持续跟踪..)那么请问一下我用刚才的sdk可以作为发布的吗 还是你们会再relese新的啊?
作者: admin    时间: 2013-8-22 11:40
您好,可以发布的。
作者: anhuijhy    时间: 2013-8-22 11:55
你好,在问一下 第一次进入时 我可以遍历所有用户,但在房间后如果有人进入 我是单个请求他的音频 还是重新遍历呢 ?如果有人退出时 要放掉他的speaker 还是整个遍历好呢?如果整个遍历的话,在之前要不要先放掉他的speaker呢?
作者: admin    时间: 2013-8-22 12:12
您好,自己进入房间之后,其它人的离开、进入有异步事件:AnyChatBaseEvent::OnAnyChatUserAtRoomMessage(int dwUserId, boolean bEnter),您可以在该事件中单独进行处理,而不需要重新遍历。
作者: anhuijhy    时间: 2013-8-22 17:41
你好今天下午有发现这个问题 这是什么原因啊

另外之前的代码中VideoChatController (和你们demo中的名字是一样的)这个类的实例化没release 现在我想在退出时 这摄像头 speaker 都释放后release 但有crash
[videoChatController release];videoChatController = nil;//加上这就

屏幕快照 2013-08-22 5.39.50 PM.png (472.34 KB, 下载次数: 7260)

屏幕快照 2013-08-22 5.39.50 PM.png

作者: admin    时间: 2013-8-22 18:31
您好,这两个Crash应该都是您的代码引起的,请仔细排查一下,谢谢。
作者: anhuijhy    时间: 2013-8-22 19:58
收到   
作者: anhuijhy    时间: 2013-8-23 11:22
你好 ,现在anychat我的项目中我是放在一个viewcontroller里的 但是这个controller 我pop的时候 dealloc怎么弄都没有执行 不知道这里是不是有什么说法啊?
作者: admin    时间: 2013-8-23 11:30
您好,AnyChat SDK不会改变程序的生命周期,也不会影响到dealloc的正常执行,请查排查一下代码,谢谢。
作者: anhuijhy    时间: 2013-8-23 14:40
大大找到了 我用了anychat的代理 但你们是这样写的
不是通常的assin
作者: admin    时间: 2013-8-23 14:41
请问您是怎样修改的?
作者: anhuijhy    时间: 2013-8-23 14:44
delegate = nil一下啊
作者: anhuijhy    时间: 2013-8-23 14:45
你们用retain 是什么原因呢
作者: admin    时间: 2013-8-23 14:51
您好,您的建议我会向iOS开发小组反馈,谢谢。
作者: admin    时间: 2013-8-27 20:46
您好,新发布的版本已将Delegate的属性由retain改为了assign,非常感谢您的建议。请重新下载AnyChat for iOS SDK
作者: anhuijhy    时间: 2013-8-28 10:02
我都写好了 ,不想动了 。重新放sdk 就可以了吧? 其他没做任何改动吧?
作者: admin    时间: 2013-8-28 10:04
是的,只需要替换.h和.a库文件即可,您的代码不需要做任何修改,谢谢。




欢迎光临 AnyChat技术支持论坛 (http://bbs.anychat.cn/) Powered by Discuz! X3