gpt4 book ai didi

objective-c - 从 NSArray 中选择对象以使用 IBAction 进一步删除

转载 作者:搜寻专家 更新时间:2023-10-30 20:08:37 25 4
gpt4 key购买 nike

所以我试图从我的数组中选择对象,以便能够在我执行 IBAction 时删除它们。我试过:

检查项目是否被选中:

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
if (self.editEnabled) {


RDNote *selectedNote = [self.notes objectAtIndex:indexPath.row];
if (selectedNote.isSelected) {
selectedNote.selected = NO;
for (NSIndexPath *indexPathFromArray in self.indexPathsOfSelectedCells) {
if (indexPathFromArray.row == indexPath.row) {
[self.mutableCopy removeObject:indexPathFromArray];
}
}
} else {
selectedNote.selected = YES;
[self.indexPathsOfSelectedCells addObject:indexPath];
}
[self.collectionView reloadData];

IB Action :

    - (IBAction)didTapTrashBarButton:(id)sender {
NSMutableArray *mutableNotes = [NSMutableArray arrayWithArray:self.notes];
for (NSIndexPath *indexPath in self.indexPathsOfSelectedCells) {
[mutableNotes removeObjectAtIndex:indexPath.row];
}
self.notes = [NSArray arrayWithArray:mutableNotes];

[self.collectionView performBatchUpdates:^{
[self.collectionView deleteItemsAtIndexPaths:[NSArray arrayWithArray:self.indexPathsOfSelectedCells]];

} completion:^(BOOL finished) {
self.indexPathsOfSelectedCells = nil;
[self activateEditMode:NO];
[self saveDataToFile:self.notes];
}];

但我遇到了索引问题,例如:(有时会显示对象索引 2 不在 [0..1] 之间的错误),并且在选择多个对象并删除它们时存在错误。请帮我提供一些我可以使用的其他方法的建议,代码将是完美的!谢谢!

最佳答案

出现这个问题是因为:假设您在数组 1,2,3,4,5 中有五个对象

您正在运行一个循环,用于根据选定行的索引路径删除对象。现在您的索引路径包含第一行和第三行。

第一次执行时,您将删除对象 1。现在 2、3、4、5 将留在数组中。现在第二次你的 indexpath.row 是第三。它将删除第三个对象,它是 4,但在实际数组中它是 3。

您的代码有时会崩溃,因为如果您选择了第一行和最后一行。在这种情况下,我选择了 1 和 5。现在我的索引路径数组会说我必须删除 objectsAtIndexes 1 和 5。

在执行循环时,我将删除索引 1 处的对象。现在我将剩下 2、3、4、5。在第二次迭代时,它会说删除 objectAtIndex 5,因为索引 5 不存在,因为现在数组中有 4 个元素。

在这种情况下,最好的方法是尝试从末尾移除数组中的元素,例如先移除第 5 个元素,然后再移除其他元素。以相反的顺序运行循环。

NSInteger i = [self.indexPathsOfSelectedCells count]-1;

while (i > 0){
NSIndexPath *indexPath = [self.indexPathsOfSelectedCells objectAtIndex:i];
[mutableNotes removeObjectAtIndex:indexPath.row];
i--;
}

关于objective-c - 从 NSArray 中选择对象以使用 IBAction 进一步删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35359998/

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