swift 4 中的非法 NSTableView 数据源
Illegal NSTableView data source in swift 4
对于 swift 4 这样的问题,我找不到任何答案或解决方案。我正在为 OSX 写作,当我使用 tableView
重新加载数据时=13=],终端returns错误-
Illegal NSTableView data source (). Must implement numberOfRowsInTableView: and
tableView:objectValueForTableColumn:row:
据我所知,我已经在扩展中实现了 numberOfRowsInTableView
和 tableView
。
有人能指出我正确的方向吗?
import Cocoa
class ViewController2: NSViewController {
var data: [[String: String]]?
@IBOutlet weak var tableView: NSTableView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
data = [
[
"type" : "type1",
"details" : "etc",
"cost" : "22"
],
[
"type" : "type2",
"details" : "etc",
"cost" : "33"
],
[
"type" : "type3",
"details" : "etc",
"cost" : "44"
]
]
self.tableView.reloadData()
}
override var representedObject: Any? {
didSet {
// Update the view, if already loaded.
}
}
}
extension ViewController2: NSTableViewDataSource, NSTableViewDelegate{
func numberOfRowsInTableView(tableView: NSTableView) -> Int {
return (data?.count)!
}
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
let item = (data!)[row]
let cell = tableView.makeView(withIdentifier: (tableColumn!.identifier), owner: self) as? NSTableCellView
cell?.textField?.stringValue = item[(tableColumn?.identifier.rawValue)!]!
return cell
}
}
您没有为 NSTableViewDataSource
方法使用 Swift 4 API。而不是
func numberOfRowsInTableView(tableView: NSTableView) -> Int {}
使用这些正确的 APIs:
func numberOfRows(in tableView: NSTableView) -> Int
数据来源见官方文档API:https://developer.apple.com/documentation/appkit/nstableviewdatasource
我唯一的解决办法是重新启动 Xcode 和 Mac。代码没有问题。有人可能和我有同样的问题。
对于 swift 4 这样的问题,我找不到任何答案或解决方案。我正在为 OSX 写作,当我使用 tableView
重新加载数据时=13=],终端returns错误-
Illegal NSTableView data source (). Must implement numberOfRowsInTableView: and tableView:objectValueForTableColumn:row:
据我所知,我已经在扩展中实现了 numberOfRowsInTableView
和 tableView
。
有人能指出我正确的方向吗?
import Cocoa
class ViewController2: NSViewController {
var data: [[String: String]]?
@IBOutlet weak var tableView: NSTableView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
data = [
[
"type" : "type1",
"details" : "etc",
"cost" : "22"
],
[
"type" : "type2",
"details" : "etc",
"cost" : "33"
],
[
"type" : "type3",
"details" : "etc",
"cost" : "44"
]
]
self.tableView.reloadData()
}
override var representedObject: Any? {
didSet {
// Update the view, if already loaded.
}
}
}
extension ViewController2: NSTableViewDataSource, NSTableViewDelegate{
func numberOfRowsInTableView(tableView: NSTableView) -> Int {
return (data?.count)!
}
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
let item = (data!)[row]
let cell = tableView.makeView(withIdentifier: (tableColumn!.identifier), owner: self) as? NSTableCellView
cell?.textField?.stringValue = item[(tableColumn?.identifier.rawValue)!]!
return cell
}
}
您没有为 NSTableViewDataSource
方法使用 Swift 4 API。而不是
func numberOfRowsInTableView(tableView: NSTableView) -> Int {}
使用这些正确的 APIs:
func numberOfRows(in tableView: NSTableView) -> Int
数据来源见官方文档API:https://developer.apple.com/documentation/appkit/nstableviewdatasource
我唯一的解决办法是重新启动 Xcode 和 Mac。代码没有问题。有人可能和我有同样的问题。