错误:非法的NSOutlineView数据源

时间:2016-12-18 02:57:38

标签: macos cocoa swift3 xcode8 nsoutlineview

我创建了一个基于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不在工作版本中。我在这里尝试过,因为它是错误中提到的功能之一。包括它并没有解决问题。

我在故事板中检查了数据源并委托了映射并重复了几次,以确保它是正确的。我交叉检查了许多其他设置,以确保它们是相同的。一个区别是应用程序具有设置托管上下文的代码行。这是另一个控件。评论它只会导致另一个错误。还有什么建议可以看看吗?

0 个答案:

没有答案