如果用户已经登录了app我会将用户的信息保存在本地包括融云登录的Token, 然后以后每次用户启动App的时候使用融云Token登录融云, 然而测试的时候从首页跳到消息(也就是融云即时通讯)模块发现总会出现一个融云的bug:
*** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.30.14/UITableView.m:1426
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'attempt to delete row 0 from section 0 which only contains 0 rows before the update'
在网上搜也没有类似的问题, 苦思良久, 想到应该是因为进入消息页面时页面初始化太晚造成的, 于是我在首页即对消息模块进行初始化:
// 如果本地有用户信息, 登录下融云
if ([UserDefaults isLogin]) {
MineUserInfoModel *user = [UserDefaults getUserInfo];
[[RCIM sharedRCIM] connectWithToken:user._token success:^(NSString *userId) {
// 解决融云的 attempt to delete row 0 from section 0 which only contains 0 rows before the update 问题
// 登录融云成功后即对会话列表进行初始化
[MyChatViewController shareMyChatViewController];
} error:^(RCConnectErrorCode status) {
} tokenIncorrect:^{
}];
}
其中shareMyChatViewController方法为:
+ (MyChatViewController *)shareMyChatViewController{
static MyChatViewController *myChatVC = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
myChatVC = [[MyChatViewController alloc] init];
});
return myChatVC;
}
结果, 解决了!!
留给后来的人.