我有一个带有两列的表格视图,分别显示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;
我认为您的数据源有问题。您可以查询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;
}