以编程方式从可变数组中删除 tableView 行和对象

Remove tableView Row and objects from mutable Array programmatically

我有一个 table 视图,其中 2 列分别显示 2 mutable 数组的内容。

我添加了一个按钮来删除所选行,并最终删除所选行索引处的数组对象。我已将按钮正确链接到 class 方法:

@implementation TableController

-(IBAction)remove:(id)sender{
    NSInteger row= [tableView selectedRow];
    [_trackNames removeObjectAtIndex:row];
    [_trackNumber removeObjectAtIndex:row];
    [tableView reloadData];
}

table查看数据源方法

-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView

    return self.trackNames.count;

-(id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {

    if ([tableColumn.identifier isEqualToString:@"Track"]) {
        return [self.trackNumber objectAtIndex:row];
    }
    else{
        return [self.list objectAtIndex:row];
    }
}

当 运行 应用程序时,单击删除按钮不会执行任何操作。

问题是由于存在两个数组吗?table视图会发生冲突。 我应该对两个数组都使用方法 - reloadDataForRowIndexes:columnIndexes: 吗?

编辑

这里是用于填充 table 视图的数组。 (table视图正确显示了它们的内容,我猜这里没有缺陷)

-(NSMutableArray*)trackNames{

    NSString *pathDataTableView = @"TrackSelectorData/ArrayTableView.plist";

    _trackNames = [NSMutableArray arrayWithContentsOfFile:pathDataTableView];

    return _trackNames;
}

-(NSMutableArray*)trackNnumber{

    _trackNumber = [[NSMutableArray alloc]init];

    for (NSInteger i = 0; i < [_trackNames count]; i++){
        [_trackNumber  addObject:[NSNumber numberWithInteger:i+1]];

    }

    return _trackNumber;

我认为您的数据源有问题。您查询 self.list 行数,但每次访问 self.list.

时都会填充它

因此,当您从内存中的数组中删除数据时,reloadData 只会从 plist 文件中获取另一个未修改的数据。

@reviver 提供的解决方案:

-(NSMutableArray*)trackNames{

if ([_trackNames objectAtIndex:0 !=NULL]){}

else {


NSString *pathDataTableView = @"TrackSelectorData/ArrayTableView.plist";

_trackNames = [NSMutableArray arrayWithContentsOfFile:pathDataTableView];

}
return _trackNames;

}