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