删除iOS 7.1.1中UITableView的行会带来NSInternalInconsistencyException

时间:2015-03-03 22:55:54

标签: ios objective-c uitableview ios7.1 ios8.1

我的应用程序中有一个奇怪的错误,我无法找到崩溃的解释。

  

无效更新:第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版本的一些错误行为,请告诉我。

0 个答案:

没有答案