NSTableViews的嵌套NSNotification

时间:2013-09-23 15:18:52

标签: objective-c cocoa nstableview

我有两个表视图控制对象集合的显示/排序(即,按类别和本地化,即Lieu)。 我的问题是:当用户点击任何这些表视图中的单元格(使用NSTableViewDelegate工作正常)时,我希望更新选择,但我还想将选择恢复到另一个表中的默认值图。

我的问题很明显:每次调用tableViewSelectionDidChange都会触发对自己的另一次调用,这会使结果安静不稳定。有没有办法阻止此调用[tableViewCategory selectRowIndexes:[NSIndexSet indexSetWithIndex:0] byExtendingSelection:NO];触发通知?

- (void)tableViewSelectionDidChange:(NSNotification *)aNotification
{   

    if ([[[aNotification object]identifier]isEqualToString:@"table2"]){
        //First, reset AnnonceWithCategory
        [tableViewCategory selectRowIndexes:[NSIndexSet indexSetWithIndex:0] byExtendingSelection:NO];
        //Then
        [self showAnnoncesWithLieu];
    }
    else if ([[[aNotification object]identifier]isEqualToString:@"table3"]){
        //First, reset AnnonceWithLieu
        [tableViewLieu selectRowIndexes:[NSIndexSet indexSetWithIndex:0] byExtendingSelection:NO];
        [self showAnnoncesWithCategory];
    }
}

1 个答案:

答案 0 :(得分:1)

您无法阻止NSTableView发送通知,但您可以阻止您的课程对其进行回复。你可以这样做:

- (void)tableViewSelectionDidChange:(NSNotification *)aNotification
{   

    if ([[[aNotification object]identifier]isEqualToString:@"table2"] && ! _currentlyUpdatingTable2){
        //First, reset AnnonceWithCategory
        _currentlyUpdatingTable2 = YES;
        [tableViewCategory selectRowIndexes:[NSIndexSet indexSetWithIndex:0] byExtendingSelection:NO];
        _currentlyUpdatingTable2 = NO;
        //Then
        [self showAnnoncesWithLieu];
    }
    else if ([[[aNotification object]identifier]isEqualToString:@"table3"] && ! _currentlyUpdatingTable3){
        //First, reset AnnonceWithLieu
        _currentlyUpdatingTable3 = YES;
        [tableViewLieu selectRowIndexes:[NSIndexSet indexSetWithIndex:0] byExtendingSelection:NO];
        _currentlyUpdatingTable3 = NO;
        [self showAnnoncesWithCategory];
    }
}

...其中_currentlyUpdatingTable2_currentlyUpdatingTable3是接收通知的对象的ivars。