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

时间:2015-10-12 23:06:42

标签: objective-c cocoa nstableview

我有一个包含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;

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

解决方案由@reviver提供:

-(NSMutableArray*)trackNames{

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

else {


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

_trackNames = [NSMutableArray arrayWithContentsOfFile:pathDataTableView];

}
return _trackNames;

}