加载或重新加载uitableview时,应用程序在用户设备上崩溃

时间:2015-04-03 13:51:07

标签: ios uitableview delegates reloaddata

我正在尝试修复在我们的任何测试设备上无法重现的chrash。该应用程序崩溃了很多次(60k次),因为这些都是关于崩解的报道。在崩溃论中,同样的崩溃报告也不同。但我认为两者都是一样的。

崩溃1 enter image description here

崩溃2

enter image description here

两次崩溃都属于同一种类。

我有2个不同的委托方法,这些方法被链接触发。

第一个委托方法具有以下代码,此方法由UITableviewcell实现。

- (void)flightSegment:(FlightSegmentViewController *)flightSegmentController didChangeHeightWith:(CGFloat)heightDelta {
int index = [flightSegmentControllers indexOfObject:flightSegmentController];   //Shows warning as indexOfObject returns NSUInteger rather than int. Could this be the problem? if it is then it should crash in all the devices. 

[UIView beginAnimations:@"originAndDestinationAnimation" context:nil];
[UIView setAnimationDuration:0.3f];

for (int i = index + 1; i < flightSegmentControllers.count; i++) {
    FlightSegmentViewController *vc = [flightSegmentControllers objectAtIndex:i];
    CGRect frame = vc.view.frame;
    frame.origin.y += heightDelta;
    vc.view.frame = frame;
}
[UIView commitAnimations];

[delegate bookingCell:self didChangeHeightWith:heightDelta];

}

第二代表方法具有以下代码。此委托方法由实际的TableViewContoller实现。

- (void)bookingCell:(XXXGMBookingCell *)theBookingCell didChangeHeightWith:(CGFloat)heightDelta {
[menuTableView beginUpdates];
[menuTableView endUpdates];

[self performSelector:@selector(reloadData) withObject:menuTableView afterDelay:0.333f];

}

有人可以指导崩溃的地方吗?我的主要内容是在我的测试设备上重现问题,然后尝试修复它。

修改

- (void)disruptionBannerShow {
NSInteger numOfRowsInSectionNul = [self tableView:menuTableView numberOfRowsInSection:0];
if (numOfRowsInSectionNul == 0) {
    [menuTableView beginUpdates];
    NSArray *insertedRows = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]];
    [menuTableView insertRowsAtIndexPaths:insertedRows withRowAnimation:UITableViewRowAnimationTop];
    [menuTableView endUpdates];
}
[self performSelector:@selector(reloadData) withObject:menuTableView afterDelay:0.33333f];

}

又是

- (void)disruptionBannerHide {
NSInteger numOfRowsInSectionNul = [self tableView:menuTableView numberOfRowsInSection:0];
if (numOfRowsInSectionNul > 0) {
    [menuTableView beginUpdates];
    NSArray *deletedRows = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]];
    [menuTableView deleteRowsAtIndexPaths:deletedRows withRowAnimation:UITableViewRowAnimationTop];
    [menuTableView endUpdates];
}
[self performSelector:@selector(reloadData) withObject:menuTableView afterDelay:0.33333f];

}

我其他几个地方我插入&amp;删除的东西。任何人都可以在我的编辑中看到错误。

1 个答案:

答案 0 :(得分:0)

发生崩溃是因为您的表更新不正确。 崩溃表示部分中的行数不匹配。将代码添加到部分或删除部分的代码中。删除/添加行后,将再次调用函数numberOfRowsInSection,返回旧计数。