我的应用程序中有一个奇怪的错误,我无法找到崩溃的解释。
无效更新:第0部分中的行数无效 更新(8)后必须包含在现有部分中的行 等于之前该部分中包含的行数 update(9),加上或减去插入或删除的行数 该部分(0插入,0删除)和加号或减号的数量 移入或移出该部分的行(0移入,0移出)
方案如下。我有一个UITableView
,可以通过“滑动删除”功能删除行。我正在使用的代码如下:
- (void) tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
// 1) Remove the object from the model
NSUInteger previousNumberOfItems = [self.items count];
[self.items removeObjectAtIndex:indexPath.row];
NSUInteger currentNumberOfItems = [self.items count];
// 2) Update the table
[tableView beginUpdates];
NSArray *indexPaths = [[NSArray alloc] initWithObjects:indexPath, nil];
[tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationLeft];
if (self.editModeEnabled && (previousNumberOfItems >= kMaxNumberOfItems) && (currentNumberOfItems < kMaxNumberOfItems)) {
NSArray *indexPaths = [[NSArray alloc] initWithObjects:[NSIndexPath indexPathForRow: currentNumberOfItems inSection:0], nil];
[tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationRight];
}
[tableView endUpdates];
}
}
仅当客户端点击外部按钮时才会设置 self.editModeEnabled
。因此,在“滑动删除”功能时,不会执行if()
语句。
tableView:numberOfRowsInSection:
看起来像这样
- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSUInteger rows = [self.items count];
if (self.editModeEnabled) {
// Calculate the rows if in edit mode
return rows++;
}
// If "Swipe to delete"
return rows;
}
客户端有一台带有iOS 7.1.1的iPad,他说应用程序每次提交删除时都会崩溃(我用日志验证过)。相反,我有一台iOS 8.1.3的iPad,我不能复制相同的行为。该应用程序以正确的方式工作。
你对如何解决这个问题有任何暗示吗?我的第一步应该是使用具有相同iOS版本的模拟器下载Xcode。
P.S。如果您了解iOS 7.1.1版本的一些错误行为,请告诉我。