环信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;
}
这下就能加载自己的扩展啦。
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;
}
这下就能加载自己的扩展啦。
没有找到相关结果
已邀请:
1 个回复
hq88
[super viewDidLoad];
self.delegate = self;
self.dataSource = self; //再补上这个代理 后 正常可点
} 这个问题看来真的是一个bug
希望环信能处理好。