我创建了一个基于this tutorial成功实现源视图的原型。然后我试图将它移植到真实的应用程序。当我运行它时,我收到错误
2016-12-17 18:30:43.693194 jazzcat [67629:1970219] ***非法的NSOutlineView数据源()。必须实现outlineView:numberOfChildrenOfItem:,outlineView:isItemExpandable:,outlineView:child:ofItem:和outlineView:objectValueForTableColumn:byItem:
我花了几个小时来比较这两个应用程序,但由于我复制并粘贴了代码,因此无法找到差异。关于类似问题的另一个问题是有一个响应,表示打印出视图控制器的对象id。目标是针对目标C.你如何在Swift中做到这一点?
这是我的控制者:
import Cocoa
class ViewController: NSViewController {
var managedContext = (NSApplication.shared().delegate as! AppDelegate).managedObjectContext
var items = [String]()
override func viewDidLoad() {
super.viewDidLoad()
print("viewDidLoad")
items = Catalog.entryList()
}
override var representedObject: Any? {
didSet {
// Update the view, if already loaded.
}
}
}
extension ViewController: NSOutlineViewDataSource {
func outlineView(_ outlineView: NSOutlineView, numberOfChildrenOfItem item: Any?) -> Int {
return Catalog.entryCount()
}
func outlineView(_ outlineView: NSOutlineView, child index: Int, ofItem item: Any?) -> Any {
return items[index]
}
func outlineView(_ outlineView: NSOutlineView, isItemExpandable item: Any) -> Bool {
return false
}
func outlineViewSelectionDidChange(_ notification: Notification) {
guard let outlineView = notification.object as? NSOutlineView else {
return
}
let selectedIndex = outlineView.selectedRow
}
/* func outlineView(_ outlineView: NSOutlineView, objectValueFor tableColumn: NSTableColumn?,
byItem item: Any?) -> Any? {
return nil
}*/
}
extension ViewController: NSOutlineViewDelegate {
func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? {
var view: NSTableCellView?
view = outlineView.make(withIdentifier: "HeaderCell", owner: self) as? NSTableCellView
if let textField = view?.textField {
textField.stringValue = String(describing: item)
}
return view
}
}
注释掉的函数objectValueFor不在工作版本中。我在这里尝试过,因为它是错误中提到的功能之一。包括它并没有解决问题。
我在故事板中检查了数据源并委托了映射并重复了几次,以确保它是正确的。我交叉检查了许多其他设置,以确保它们是相同的。一个区别是应用程序具有设置托管上下文的代码行。这是另一个控件。评论它只会导致另一个错误。还有什么建议可以看看吗?