调用UITableView reloadSections方法崩溃

时间:2017-01-13 06:08:24

标签: ios objective-c uitableview reloaddata

我只是执行正常操作:从服务器请求数据并通过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移出)

1 个答案:

答案 0 :(得分:0)

您的应用已崩溃,因为reloadSection方法无法更新部分和行计数器,因此在您更改了部分或行计数器且UITableView具有不同计数器的情况下会导致崩溃。

当您使用reloadData时,首先调用numberOfSectionsInTableView,然后调用numberOfRowsInSection,以便您的UITableView具有正确的分段和行计数器。