[英]"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.