[英]"Ambiguous use of 'children'" when trying to use NSTreeController.arrangedObjects in Swift 3.0
[英]Overriding arrangedObjects of NSTreeController
在我的项目中, NSTreeController
绑定到NSOutlineView
(可可绑定)。 由于某些原因, 我无法使用NSPredicate
从Core Data筛选数据。 于是,我就重写arrangedObjects
的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的splittedObjects方法返回的值是不透明的。 您应仅观察此属性来确定已发生更改。
在文档中 。 那么,怎样才能NSOutineView
消耗arrangedObjects
没有阅读它(直接)?
设置fetchPredicate
的的NSTreeController
在厦门国际银行或代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.