最近,接口做了调整。突然就闪退了。通过断点,定位到BUG位置,是由于数组交换引起的。
原来代码如下:
//把末尾的“其他”交换到头部
for (SMTHomeSectionModel *section in dataSource) {
if ([section.sectionTitle isEqualToString:@"其他"]) {
[dataSource exchangeObjectAtIndex:0 withObjectAtIndex:dataSource.count - 1];
}
}
但是接口修改后,其他就不是末尾了,是倒数第2个。这样就出现数组越界而闪退。也就是定位数组位置,编写方法不灵活,引发的BUG。修改后如下:
// 把其他换到第1行
int curposion=0;
for (SMTHomeSectionModel *section in dataSource) {
if ([section.sectionTitle isEqualToString:@"其他"]) {
//升级新接口后首页闪退BUG
//add by tiberx 2019-12-4
NSLog(@"其他 curposion000:%d",curposion);
[dataSource exchangeObjectAtIndex:0 withObjectAtIndex:curposion];
break;//必须加,由于不是末尾,在调换后,继续循环 会引发闪退
}
curposion++;
}
用指针计数定位,显然更科学。同时在一次循环中,交换位置后,继续循环是会错位的,所以必须要跳出循环,否则会引起数组越界的闪退报错。