gpt4 book ai didi

uitableview - 具有多个部分的 XCODE TableView 和来自数组数组的委托(delegate)数据源 - 无法无误地删除行?

转载 作者:行者123 更新时间:2023-12-02 00:08:55 25 4
gpt4 key购买 nike

我有一个包含多个部分的 TableView,它有一个链接到数组数组的委托(delegate)数据源。数组数组中的每个数组都是它自己的 TableView 部分。我已正确加载它并启用了编辑按钮,但是当我尝试删除我的应用程序时崩溃并出现以下错误。

*** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效更新:无效的部分数。更新后 TableView 中包含的节数 (9) 必须等于更新前 TableView 中包含的节数 (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];

}


}

我觉得这可能与创建多个部分的数组数组的复杂性有关,但一定有办法做到这一点吗?

非常感谢您的帮助,因为我现在已经查看相同的代码几个小时了。

最佳答案

我终于设法解决了这个问题,最后有几个问题。这完全是因为我试图从一个或多个数组中删除项目的方式。我应该使用的代码是这样的:

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

然后我对我定义数组的方式有疑问,因为它们是从 plist 构建的,虽然设置为 NSMutableArray,但它们正在转换为 NSArray。所以在该声明的末尾,我加入了。

........mutablecopy];

所有问题都解决了:)

关于uitableview - 具有多个部分的 XCODE TableView 和来自数组数组的委托(delegate)数据源 - 无法无误地删除行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16675006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com