我有一个带有复选框的 NSOutlineView。我将复选框状态绑定到具有键 shouldBeCopied 的节点项。在节点项中,我有 getter 和 setter,如下所示:
-(BOOL)shouldBeCopied {
if([[self parent] shouldBeCopied])
return YES;
return shouldBeCopied;
}
-(void)setShouldBeCopied:(BOOL)value {
shouldBeCopied = value;
if(value && [[self children] count] > 0)
[[self delegate] reloadData];
}
这里的想法是,如果检查父母,孩子也应该检查。我遇到的问题是,当我检查父级时,如果它们已经展开,它不会更新子级的视图。我可以理解它不应该被绑定更新,因为我实际上并没有改变值。但是 reloadData 不应该导致绑定重新获取值,从而调用-shouldBeCopied
孩子吗?-setNeedsDisplay
我已经尝试了一些其他的东西,例如-reloadItem:nil reloadChildren:YES
但没有工作。我注意到当我切换到 xcode 然后再返回时显示会刷新,这就是我想要的,那么我如何让它表现得那样呢?