gpt4 book ai didi

cocoa - NSTreeController 错误 - 此类与键的键值编码不兼容

转载 作者:行者123 更新时间:2023-12-03 16:34:55 28 4
gpt4 key购买 nike

我是 Swift 新手,正在尝试学习如何使用 NSOutlineView 实现 NSTreeController。我一直在遵循几个显示此类示例的指南,但我不断收到错误。我一步一步地遵循和/或尝试运行他们的源代码(如果有),但我遇到了同样的错误。我认为 Swift 4 中存在一些变化,导致这些 Swift 3 示例产生错误。由于 Swift 4 中没有太多示例,我决定尝试在这里提出问题。

我收到的错误是:

this class is not key value coding-compliant for the key isLeaf.

我相信错误来自为 NSTreeController 设置的关键路径:

enter image description here

但是我不确定需要做什么来修复该错误。

我有一个名为 Year 的简单模型类。

class Year: NSObject {

var name: String

init(name: String) {
self.name = name
}

func isLeaf() -> Bool {
return true
}
}

我的 View Controller 看起来像这样。

class ViewController: NSViewController, NSOutlineViewDataSource, NSOutlineViewDelegate {

@IBOutlet weak var outlineView: NSOutlineView!
@IBOutlet var treeController: NSTreeController!

override func viewDidLoad() {
super.viewDidLoad()

addData()
outlineView.delegate = self
outlineView.dataSource = self
}

func addData() {
let root = ["name": "Year", "isLeaf": false] as [String : Any]

let dict: NSMutableDictionary = NSMutableDictionary(dictionary: root)
dict.setObject([Year(name: "1999"), Year(name: "2000")], forKey: "children" as NSCopying)
treeController.addObject(dict)
}

func isHeader(item: Any) -> Bool {
if let item = item as? NSTreeNode {
return !(item.representedObject is Year)
} else {
return !(item is Year)
}
}

func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? {
if isHeader(item: item) {
return outlineView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "HeaderCell"), owner: self)!
} else {
return outlineView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "DataCell"), owner: self)!
}
}
}

当我运行该程序时,它不会导致任何问题,但是当我展开节点以显示根的两个子节点时,它会给出我上面提到的错误。

最佳答案

因为NSOutlineView在KVO中使用了isLeaf,所以必须在isLeaf前面添加@objc > 功能:

@objc func isLeaf() -> Bool {
return true
}

关于cocoa - NSTreeController 错误 - 此类与键的键值编码不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47214258/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com