Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在tableview中删除节时应用程序崩溃_Ios_Objective C_Uitableview - Fatal编程技术网

Ios 在tableview中删除节时应用程序崩溃

Ios 在tableview中删除节时应用程序崩溃,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我正在尝试使用以下代码删除单元格并从UITableView中删除节: [self.tableView beginUpdates]; [arraymasterFeedFullDetails removeObjectAtIndex:cellSelectedIndexPath.section]; [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:cellSelectedIndexPath.section]withRowAnimat

我正在尝试使用以下代码删除单元格并从UITableView中删除节:

[self.tableView beginUpdates];
[arraymasterFeedFullDetails removeObjectAtIndex:cellSelectedIndexPath.section];
[self.tableView deleteSections:[NSIndexSet indexSetWithIndex:cellSelectedIndexPath.section]withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];
这里,cellSelectedIndexPath是NSIndexPath变量,它指向当前选定的节。arraymasterFeedFullDetails是我的数据源,每个部分只有一行

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return [arraymasterFeedFullDetails count];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 1;
}

当您有一个数据源时(
arraymasterFeedFullDetails
,在您的例子中),删除一个项需要做的事情是从数据源中删除对象,然后重新加载表

您可以使用
[self.tableView reloadData]重新加载表

因此,您的代码如下所示:

[arraymasterFeedFullDetails removeObjectAtIndex:cellSelectedIndexPath.section];
[self.tableView reloadData];

当您有一个数据源(在您的例子中是arraymasterFeedFullDetails)时,删除一个项需要做的事情是从数据源中删除对象,然后重新加载整个表,或者通过动画从数据源中删除单元格。 这通常会产生更好的视觉效果

reloadData方法将重新加载整个表,而无需动画。 当前显示的单元格将被简单地重新绘制。例如:

[self.tableView reloadData];
您不需要更新tableview本身,因为它将被简单地重新绘制

要仅删除“编辑掉的单元格”,并产生动画效果,可以使用方法deleteRowsAtIndexPaths:withRowAnimation:

例如:

您还可以从可变数组中删除行,然后调用 deleteSections:withRowAnimation:开始更新结束更新之间,以便从tableview中删除整个部分


在这两种动画删除方法中,在执行任何将更新tableview的动画之前,需要确保数据源具有相同的tableview单元格计数(删除后)

在NumberOfSectionsTableView中提供崩溃消息和堆栈跟踪的详细信息每次删除节时,您都必须从arraymasterFeedFullDetails中删除一个对象。我收到此崩溃消息:由于未捕获的异常而终止应用程序'NSInternalInconsistencyException',原因:'无效更新:节数无效。更新后表视图中包含的节数(6)必须等于更新前表视图中包含的节数(5),加上或减去插入或删除的节数(0插入,1删除)。'因此消息说您从5节开始,删除了一个,但在所有
numberOfSectionsInTableView
的结尾处返回了6-比开始时多了一个。是否设置了断点并检查了数组?这样,它将重新加载整个tableview,而不是通过设置动画只删除所需的单元格。相反,您可以按照OPs方法更新数据源,这样就解决了问题。不,没有理由调用“reloadData”。只需删除一个部分。[tableView reloadData]加载完整的tableView,我想知道如何只加载一个部分。因为我在一个表中有大量的节。这也是无效的。OP希望删除整个节,而不是一行。使用
deleteSections:withRowAnimation:
    // Overridden to support editing the table view.
    - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
        if (editingStyle == UITableViewCellEditingStyleDelete) {
            [_list2 removeObjectAtIndex:indexPath.row]; // remove row from array
            [tableView deleteRowsAtIndexPaths:@[indexPath]  withRowAnimation:UITableViewRowAnimationFade]; // remove cell from UITableView
        } 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
        }
    }