在我的项目中,NSTreeController绑定到NSOutlineView(可可绑定)。由于某些原因,我无法使用NSPredicate 从数据中筛选数据。因此,我试图重写arrangedObjects of NSTreeController,但覆盖的arrangedObjects 甚至没有被解雇。(我在其中设置了一个调试断点。)代码编译得很好,我已经将实例更改为我的CleanTreeController。我只在邮件列表中找到了十年前一个未回答的问题。
// Subclass of NSTreeController
class CleanTreeController: NSTreeController {
init() {
// This gets called.
super.init(content: nil)
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
override var arrangedObjects: Any {
let oldArranged = super.arrangedObjects
let selector = NSSelectorFromString("childNodes")
guard let oldChildren = (oldArranged as! NSObject)
.perform(selector).takeUnretainedValue() as? [NSTreeNode]
else
{
return oldArranged
}
let children = oldChildren.filter { (treeNode) in
//... do some filtering
}
return TreeNodeProxy(with: children)
}
}
// Homemade NSTreeNodeProxy
class TreeNodeProxy : NSObject {
fileprivate var rootNode : NSTreeNode
init(with children : [NSTreeNode]) {
self.rootNode = NSTreeNode()
self.rootNode.mutableChildren.addObjects(from: children)
}
@objc(childNodes)
var children: [NSTreeNode]? {
return rootNode.children
}
@objc(descendantNodeAtIndexPath:)
func descendant(at indexPath: IndexPath) -> NSTreeNode? {
return rootNode.descendant(at: indexPath)
}
}我发现
NSTreeController的arrangedObjects方法返回的值是不透明的。您只应观察此属性以确定是否发生了更改。
在文档里。那么,NSOutineView如何在不直接读取arrangedObjects的情况下使用它呢?
发布于 2017-03-21 09:38:20
在xib或代码中设置NSTreeController的NSTreeController。
https://stackoverflow.com/questions/42919957
复制相似问题