我只是执行正常操作:从服务器请求数据并通过reloadSections
刷新tableview,但我确实收到了很多崩溃日志。如果我拨打reloadData
,一切正常。即使我知道reloadData
效果很好,但似乎reloadSections
效率更高
有没有人有任何想法?
通过持久连接从服务器获取数据:
[_pomelo onRoute:@"onTlive" withCallback:^(NSDictionary *data) {
@strongify(self);
if (self.liveTableView) {
[self.liveTableView configData:data refresh:self.playerView.isScreenPortrait];
}
}];
然后配置数据并刷新tableview:
- (void)configData:(NSDictionary *)data refresh:(BOOL)refresh {
if (!data || data.allKeys.count == 0) {
return;
}
NSArray *liveArray = [data valueForKeyPath:@"body.data"];
[liveArray enumerateObjectsUsingBlock:^(NSString *obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSArray *liveDetailInfo = [obj componentsSeparatedByString:@"|"];
if (liveDetailInfo && liveDetailInfo.count > 0) {
NSArray *tliveInfo = [liveDetailInfo.lastObject componentsSeparatedByString:@"^"];
SPBasketballLive *liveObject = [SPBasketballLive new];
liveObject.type = tliveInfo[0];
liveObject.time = tliveInfo[1];
liveObject.team = tliveInfo[2];
liveObject.playerId = tliveInfo[3];
liveObject.score = tliveInfo[4];
liveObject.text = tliveInfo[5];
liveObject.quarter = ((NSString *)liveDetailInfo.firstObject).integerValue;
if (self.curMatch.liveInfo.count == liveObject.quarter) {
NSMutableArray *quarterArray = self.curMatch.liveInfo.firstObject;
[quarterArray insertObject:liveObject atIndex:0];
} else {
NSMutableArray *quarterArray = [NSMutableArray new];
[quarterArray addObject:liveObject];
[self.curMatch.liveInfo insertObject:quarterArray atIndex:0];
}
}
}];
if (refresh) {
if (_curMatch.liveInfo.count > 0) {
[self.myTableView reloadSections:[NSIndexSet indexSetWithIndex:4] withRowAnimation:UITableViewRowAnimationNone];
}
}
}
以下是崩溃日志:
无效更新:第4节中的行数无效。更新后现有部分中包含的行数(98)必须等于更新前该部分中包含的行数(96),或者减去从该部分插入或删除的行数(0插入,0删除)和加或减移入或移出该部分的行数(0移入,0移出)
答案 0 :(得分:0)
您的应用已崩溃,因为reloadSection
方法无法更新部分和行计数器,因此在您更改了部分或行计数器且UITableView
具有不同计数器的情况下会导致崩溃。
当您使用reloadData
时,首先调用numberOfSectionsInTableView
,然后调用numberOfRowsInSection
,以便您的UITableView
具有正确的分段和行计数器。