XCODE 表视图具有多个部分并从数组中委派数据源 - 无法删除行而没有错误?



我有一个有多个section的TableView它有一个委托数据源它链接到一个数组的数组。数组的数组中的每个数组都是它自己的Table View Section。我有它正确加载,并有一个编辑按钮启用,但当我试图删除我的应用程序崩溃与以下错误。

***由于未捕获异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效更新:无效的节数。

更新后表视图中包含的节数(9)必须等于更新前表视图中包含的节数(10),加上或减去插入或删除的节数(0插入,0删除)。

现在我没有删除一个部分,所以我有点困惑,这里是我的代码样本。我已经搜索了这个论坛,但就是找不到我做错了什么。

这是我的代码:

// Calculate how many sections in the table view from the array or arrays
- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView{
    AppDelegate *delegate = [[UIApplication sharedApplication]delegate];
    NSInteger sections = [delegate.packing.packingListArray count];
    return sections;
}
// Load the array and extract the count of items for each section
- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    // For each array within the array of array count the items
    AppDelegate *delegate = [[UIApplication sharedApplication]delegate];
    NSArray *sectionContents = [delegate.packing.packingListArray objectAtIndex:section];
    NSInteger rows = [sectionContents count];
    return rows;
}
// Load the list into the table view
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    // Set the cell identifier - using ID field thats been set in interface builder
    static NSString *CellIdentifier = @"DestinationCell";
    // Re-use existing cell?
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    // If no reusabled cells then create a new one
    if (cell == nil){
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    // Add the relevant packing list array from the array of arrays
    AppDelegate *delegate = [[UIApplication sharedApplication]delegate];
    NSArray *sectionContents = [delegate.packing.packingListArray objectAtIndex:[indexPath section]];
    NSString *contentForThisRow = [sectionContents objectAtIndex:[indexPath row]];
    cell.textLabel.text = contentForThisRow;

    // Return the formatted cell with the text it needs to display in the row
    return cell;
}
// Delete row from table and update data source array
- (void) tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle) editingStyle forRowAtIndexPath:(NSIndexPath *) indexPath {
    if (editingStyle ==UITableViewCellEditingStyleDelete) {

        [tableView beginUpdates];
        // Delete the item from the array
        AppDelegate *delegate = [[UIApplication sharedApplication]delegate];
        [delegate.packing.packingListArray  removeObjectAtIndex:indexPath.row];

        // Delete the row from the table view
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
        [tableView endUpdates];
    }

}

我有一种感觉,这可能与数组的数组创建多个section的复杂性有关但一定有某种方法可以做到这一点?

任何帮助都非常感谢,因为我已经看了几个小时相同的代码了。

我终于设法解决了这个问题,有几个问题,然后结束。这都是由于我试图从数组或数组中删除项目的方式。我应该使用的代码是这样的:

AppDelegate *delegate = [[UIApplication sharedApplication]delegate];
[[delegate.packing.packingListArray objectAtIndex:indexPath.section] removeObjectAtIndex:indexPath.row];

然后我有一个问题,我有我的数组定义的方式,因为他们是从plist,虽然设置为NSMutableArray,他们被转换为NSArray。因此,在语句的末尾,我加入了。

........mutablecopy];

所有问题解决:)

相关内容

  • 没有找到相关文章

最新更新