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

问题描述 投票:0回答:2

我有一个带有两列的表格视图,分别显示2个可变数组的内容。

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

@implementation TableController

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

[tableView数据源方法

-(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];
    }
}

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

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

编辑

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

-(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;
objective-c cocoa nstableview
2个回答
0
投票

我认为您的数据源有问题。您可以查询self.list以获取行数,但是每次访问self.list时都会填充它。

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


0
投票

该解决方案由@reviver提供:

-(NSMutableArray*)trackNames{

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

else {


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

_trackNames = [NSMutableArray arrayWithContentsOfFile:pathDataTableView];

}
return _trackNames;

}

© www.soinside.com 2019 - 2024. All rights reserved.