为什么所选行中的对象不会从数组selectedIndexes中删除

时间:2014-08-19 22:42:31

标签: ios objective-c

知道为什么表视图的选定行中的对象没有从数组中删除(选定的索引)

以下是我要删除的代码(在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];
}

2 个答案:

答案 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];