以编程方式从可变数组中删除 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;
}
我有一个 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;
}