【发布时间】:2014-04-09 21:41:13
【问题描述】:
我有一个没有绑定的基本 NSTableView(基于视图)和一个包含几个控件(水平滑块和 NSStepper)的 tableCellView。我使用滑块和步进器来调整与行关联的特定项目的值。一切都按预期工作,除非我删除了一个项目。
例如,如果我删除一个项目,然后尝试选择第 2 行中的滑块或步进器,它似乎也在选择第 3 行中的相应控件。我将每个控件连接到相同的操作,如下所示
- (IBAction)percentDidChange:(id)sender
{
NSInteger row = [_allocationTable rowForView:sender];
NSLog(@"The row is %ld", (long)row);
}
当我尝试调整第 2 行中的控件时,日志语句将生成以下内容
The row is 2
The row is 3
The row is -1
如果我退出此视图,然后按预期返回所有作品。
我通过以下操作删除项目
- (IBAction)removeSector:(id)sender
{
NSInteger row = [self.allocationTable rowForView:sender];
Allocation *allocation = [self.dataSource objectAtIndex:row];
[self.myManagedContext deleteObject:allocation];
NSError *anyError = nil;
BOOL success = [self.myManagedContext save:&anyError];
if (!success) {
DLog(@"Error:%@", anyError);
}
//Update all objects
[self renumberViewPositions];
[self updateDataSource];
[_allocationTable reloadData];
[self percentCenterTextField];
[[[self hostView] hostedGraph] reloadData];
}
而我的 Tableview 数据源方法是
- (NSView *)tableView:(NSTableView *)tableView
viewForTableColumn:(NSTableColumn *)tableColumn
row:(NSInteger)row
{
//Setup Number Formatter
SBIPercentFormatter *percentFormat = [[SBIPercentFormatter alloc] init];
SBIAllocationCellView *result = [tableView makeViewWithIdentifier:@"MyView" owner:self];
NSNumber *percentValue = [[self.dataSource objectAtIndex:row] valueForKey:@"sectorPercentage"];
NSString *percent = [percentFormat stringFromNumber:percentValue];
[self updateSectorPopupItems:[result sectorPopUpButton]];
result.sectorPopUpButton.title = [[self.dataSource objectAtIndex:row] valueForKey:@"sectorName"];
result.sectorPercentage.stringValue = percent;
result.percentStepper.objectValue = percentValue;
result.mySlider.objectValue = percentValue;
return result;
}
有什么想法会导致这种行为吗?
编辑
确认此行为仅在我创建足够需要滚动视图的项目时所有 tableviewcells 可见时才会发生,然后按预期工作。
【问题讨论】:
标签: cocoa nstableview