簡體   English   中英

覆蓋NSTreeController的rangedObjects

[英]Overriding arrangedObjects of NSTreeController

在我的項目中, NSTreeController綁定到NSOutlineView (可可綁定)。 由於某些原因, 我無法使用NSPredicate從Core Data篩選數據。 於是,我就重寫arrangedObjectsNSTreeController ,但首要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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM