gpt4 book ai didi

iphone - 删除行时崩溃 - 部分中的不一致未更新

转载 作者:行者123 更新时间:2023-12-03 20:29:03 29 4
gpt4 key购买 nike

当我使用 commitEditingStyle 从 UITableView 中删除一行时,我的应用程序崩溃并显示以下错误消息。但奇怪的是我正在从第 3 节中删除。消息中的不一致来自第 4 节。

* Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-1262.60.3/UITableView.m:920 2010-11-22 19:56:44.789 bCab[23049:207] * Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 4. The number of rows contained in an existing section after the update (1) must be equal to the number of rows contained in that section before the update (0), plus or minus the number of rows inserted or deleted from that section (0 inserted, 0 deleted).'

在数据源中,我根据第 3 节中的行数更新第 4 节。当从第 3 节中删除一行时,第 4 节中的行数从 0 变为 1。这似乎导致了问题。难道就没有办法避免这种情况吗?

任何指示将不胜感激。谢谢。

更新:

TableView 中的节数 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 返回6;
}

节内行数

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
bCabAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

if (section == 0) { // First name, last name
return 2;
}
else if (section == 1) { // Password
return 2;
}
else if (section == 2) { // Mobile, DOB , Gender
return 3;
}
else if (section == 3) { // credit cards
return [creditCards count];
}
else if (section == 4) { // Add credit card
if ([creditCards count] >= 3) {
return 0;
}
else {
return 1;
}
}
else if (section == 5) {
return 0;
}

return 0;

}

commitEditingStyle

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
if (indexPath.section == 3) {
// Delete the row from the data source
NSLog(@"%d %d", indexPath.section, indexPath.row);
[creditCards removeObjectAtIndex:indexPath.row];

// Delete from backend

[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES];

//[tableView reloadData];
}
}
else if (editingStyle == UITableViewCellEditingStyleInsert) {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}

}

我尝试过使用和不使用[tableView reloadData],结果相同。

感谢您的帮助!

最佳答案

In datasource, I update section 4 depending on the number of rows in section 3. When a row is deleted from section 3, number of rows in section 4 goes from 0 to 1. This seems to cause the issue. Is there no way to avoid this?

使用deleteRowsAtIndexPaths:withAnimation时,您可以保证数据源仅删除具有指定索引路径的行。在您的情况下,您还在表中插入一行,这意味着数据源的状态不是 TableView 所期望的。

当删除第 3 部分中的行并且还涉及在第 4 部分中插入行时,您必须执行以下操作:

[self.tableView beginUpdates];
[self.tableView [NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[self.tableView insertRowsAtIndexPath:[NSArray arrayWithObject:indexPathForInsertedRow] withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];

关于iphone - 删除行时崩溃 - 部分中的不一致未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4243834/

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