知道为什么表视图的选定行中的对象没有从数组中删除(选定的索引)
以下是我要删除的代码(在else部分中)
@property(nonatomic, strong) NSMutableArray *selectedIndexes;
//...
_files = @[@"filea", @"fileb", @"filec"];
//...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];
if ([selectedCell accessoryType] == UITableViewCellAccessoryNone)
{
NSString *filename = [_files objectAtIndex:indexPath.row];
[selectedCell setAccessoryType:UITableViewCellAccessoryCheckmark];
[selectedIndexes addObject:filename];
}
else
{
[selectedCell setAccessoryType:UITableViewCellAccessoryNone];
NSString *objecttoDelete = [selectedIndexes objectAtIndex:indexPath.row];
[selectedIndexes removeObject:objecttoDelete];
}
[tableView deselectRowAtIndexPath:indexPath animated:NO];
}
答案 0 :(得分:1)
我们说我点击表格中的第三行;那么你的数组将如下所示:
[0 => "Row 3 content"]
然后我点击第1行:
[0 => "Row 3 content"
1 => "Row 1 content"]
所以要明确的是,第3行(表中的索引2)在索引0中。
现在让我们说我去删除第3行。我点击它:
//indexPath.row == 2, so
objectToRemove = [selectedIndexes objectAtIndex:2] //<--Index 2!!!
哦,哦,哦!我试图删除索引2处的对象!当您尝试删除对象时,您没有考虑它们被添加到数组的顺序!
由于对象没有改变,你可以简单地将对象移除,就像你添加对象一样......有意义吗?
好吧,无论如何,以同样的方式获取对象:
NSString *filename = [_files objectAtIndex:indexPath.row];
这将获得正确的字符串。然后你可以通过for循环搜索来删除它(可能有一种更简洁的方法来执行此操作,但是你去了):
for(int i = 0; i < [selectedIndexes count]; i++)
{
if([[selectedIndexes objectAtIndex:i] isEqualToString:filename])
{
[selectedIndexes removeObjectAtIndex:i];
break;
}
}
希望这是有道理的。如果您有任何问题,请发表评论。
答案 1 :(得分:0)
您尝试删除的内容是否可能不是字符串?也许试试
id *objectToDelete = [selectedIndexes objectAtIndex:indexPath.row];
[selectedIndexes removeObject:objecttoDelete];
代替。或者你有没有想过跳过它并只使用removeAtObjectAtIndex:
?
[selectedIndexes removeObjectAtIndex:indexPath.row];