我正在观察 NSCollectionView 实例的“selectionIndexes”,如下所示:
[self.collectionView addObserver:self forKeyPath:@"selectionIndexes" options:0 context:nil];
然后我响应 observeValueForKeyPath: 中的变化,如下所示:
if(object == self.collectionView)
{
if([keyPath isEqualToString:@"selectionIndexes"])
NSLog(@"selectionIndexes CHANGED");
}
我注意到,如果我单击一个项目,我会收到两个通知,一个用于鼠标按下事件,另一个用于鼠标按下事件。两次 selectionIndexes 属性都返回项目的索引。你甚至可以慢慢地点击,向下暂停并观察日志中的两个不同的触发。
这似乎不正常,我该如何阻止?单击 NSCollectionItem 时是否有更好的通知方式?
更新:我发现它被触发了两次,因为我还清除了 observeValueForKeyPath 中的选择:
if(object == self.collectionView)
{
if([keyPath isEqualToString:@"selectionIndexes"])
{
NSLog(@"selectionIndexes CHANGED");
[self.collectionView setSelectionIndexes:nil];
}
}
出于某种原因,NSCollectionView 看到它的选择在该项目的鼠标向上事件中设置为 nil,它会重置选择索引。仍然不确定我想如何解决这个问题,因为我确实需要将选择设置回零。