2017-07-11 19 views
0

我想重新加載一個表視圖與委託的幫助。我在堆棧溢出中發現了很多例子,但是我總是會遇到一個錯誤。無法設置代理重新加載表視圖

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>')

回答

0

將委託協議名稱重命名爲MyPageControllerDelegate。看起來好像已經有一些稱爲PageControllerDelegate的東西,它是由您定義的,或者是Apple定義的

+0

不幸的是,錯誤依然存在:Property'delegate'的類型爲'MyPageControllerDelegate?'無法覆蓋類型爲'NSPageControllerDelegate?'的屬性(又名'可選') – northsea

0

NSPageController已經有delegate類型的NSPageControllerDelegate。刪除var delegate: PageControllerDelegate?

+0

好的。但是,如何調用'updateTableData()'呢?我可以通過函數'saveData'中的'self.delegate'訪問'NSPageControllerDelegate',但是這個委託並不知道函數'updateTableData()'。 – northsea