我遇到了让NSTableView与Swift 3和XCode 8一起工作的问题。我有一个应用程序,其中包含一个表和一列,并尝试从NSMutableArray添加项目。这是我的代码:
sed -i '' -E "s~^([ \t]*key2:[ \t]*).*~\1$val~" hash.yml
然而,这给了我一个错误:
import Cocoa
class ViewController: NSViewController {
@IBOutlet weak var tableView: NSTableView!
var objects: NSMutableArray! = NSMutableArray()
override func viewDidLoad() {
super.viewDidLoad()
self.objects.add("one")
self.objects.add("two")
self.objects.add("three")
self.objects.add("four")
self.tableView.reloadData()
}
func numberOfRowsInTableView(tableView: NSTableView) -> Int
{
return self.objects.count
}
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any?
{
let cellView = tableView.make(withIdentifier: "cell", owner: self) as! NSTableCellView
cellView.textField!.stringValue = self.objects.object(at: row) as! String
return cellView
}
override var representedObject: Any? {
didSet {
// Update the view, if already loaded.
}
}
}
看起来两种方法都已实现,所以我不知道为什么我会收到此错误。 dataSource和表视图的委托都设置为man View。
答案 0 :(得分:2)
您的numberOfRows方法签名对于当前的macOS SDK不正确。它应该是:
func numberOfRows(in tableView: NSTableView) -> Int
答案 1 :(得分:0)
正如pbush25所建议的那样,我必须在代码中设置委托和数据源。此外,我将TableView模式切换为“基于单元格”,然后最终代码如下所示:
import Cocoa
class ViewController: NSViewController, NSTableViewDelegate, NSTableViewDataSource {
@IBOutlet weak var tableView: NSTableView!
var objects: NSMutableArray! = NSMutableArray()
override func viewDidLoad() {
super.viewDidLoad()
self.objects.add("one")
self.objects.add("two")
self.objects.add("three")
self.objects.add("four")
tableView.delegate = self
tableView.dataSource = self
}
func numberOfRows(in tableView: NSTableView) -> Int
{
return self.objects.count
}
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any?
{
return self.objects.object(at: row)
}
override var representedObject: Any? {
didSet {
}
}
}