无法将委托设置为重新加载表视图

时间:2017-07-11 21:46:50

标签: swift delegates tableview nstableview

我正在尝试在委托的帮助下重新加载表格视图。我在堆栈溢出时发现了大量的例子,但我总是出错。

我的第一个应该更新表视图的控制器:

import Cocoa

class ViewController: NSViewController {

    @IBOutlet weak var tableView: NSTableView!

    var tableViewData: [[String:String]] = []

    override func viewDidLoad() {
        super.viewDidLoad()
        ...
        self.tableView.delegate = self as NSTableViewDelegate
        self.tableView.dataSource = self
        self.tableView.reloadData()
    }

    override var representedObject: Any? {
        didSet {
        }
    }

    func reloadTableData(_ notification: Notification) {
        tableView.reloadData()
    }
}

extension ViewController: NSTableViewDataSource, NSTableViewDelegate {
    func numberOfRows(in tableView: NSTableView) -> Int {
        return tableViewData.count
    }

    func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView?{
        var result:CustomTableCellview
        result  = tableView.make(withIdentifier: (tableColumn?.identifier)!, owner: self) as! CustomTableCellview
        result.textField?.stringValue = tableViewData[row][(result.textField?.identifier!)!]!
        result.secondTextField?.stringValue = tableViewData[row][result.secondTextField.identifier!]!
        return result
    }
}

extension ViewController: PageControllerDelegate {
    func updateTableData() {
        tableView.reloadData()
    }
}

我的第二个控制器,应告诉第一个控制器它可以更新表视图:

import Cocoa

protocol PageControllerDelegate {
    func updateTableData()
}

class PageController: NSPageController {

    var delegate: PageControllerDelegate?

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func saveData(sender: NSButton) {
        ...
        delegate?.updateTableData()
        self.dismiss(self)
    }
}

在PageController中我收到以下错误:

Property 'delegate' with type 'PageControllerDelegate?' cannot override a property with type 'NSPageControllerDelegate?' (aka 'Optional<NSPageControllerDelegate>')

2 个答案:

答案 0 :(得分:0)

将委托协议名称重命名为MyPageControllerDelegate。好像已经有一个名为PageControllerDelegate的东西由你或Apple

定义

答案 1 :(得分:0)

NSPageController已有delegate类型的属性NSPageControllerDelegate。删除var delegate: PageControllerDelegate?