注册

环信3.0 调用 ChatViewController 后一个bug

最近搞了几天的环信3.0集成,在初始化聊天窗口时,自己的扩展总是第一次加载不上,非得第二次才加载上, 嗯,这问题问下了环信技术说是bug。哈哈 ,调试后发现重写父类的构造便可解决。
 
ChatViewController  3.0demo 在初始化时,子类中并没有重写父类的- (instancetype)initWithConversationChatter:(NSString *)conversationChatter   conversationType:(EMConversationType)conversationType ;构造方法
 
 
发现在运行时 EaseMessageViewController 中的 dataSource  是nil  这下就搞不明白了  后面细看了下程序 的流程终于发现问题所在了。
ChatViewController.m  类中的viewDidLoad是这样子的,
- (void)viewDidLoad {
    [super viewDidLoad]; //这个不就是去调用父类的加载了么,而聊天的所有内容现在环信都是放在了EaseMessageViewController去完成的,而dataSource对象还没有给值呢,那父类里的判断子类有没有实现代理就没法判断了。
    self.delegate = self;
    self.dataSource = self;
}
 
所以我对ChatViewController 重写了
- (instancetype)initWithConversationChatter:(NSString *)conversationChatter   conversationType:(EMConversationType)conversationType {
      self = [super initWithConversationChatter:conversationChatter conversationType:conversationType];
      if (self) {
          self.delegate = self;
         self.dataSource = self; // 把这个提前负值
      }
    return self;
}
这下就能加载自己的扩展啦。    
 
已邀请:
这种处理还会引发别外一个问题,就是点表情时会报崩溃的,于是乎在- (void)viewDidLoad {
    [super viewDidLoad]; 
    self.delegate = self;
    self.dataSource = self;  //再补上这个代理 后 正常可点
}  这个问题看来真的是一个bug
希望环信能处理好。

要回复问题请先登录注册