2017-07-11 6 views
0

デリゲートの助けを借りてテーブルビューを再ロードしようとしています。私はスタックオーバーフローでたくさんの例を見つけましたが、私はいつもエラーで終わります。デリゲートをテーブルビューをリロードするように設定できません

テーブルビュー更新する必要があります私の最初のコントローラ:私が得るPageControllerで内

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

:それはテーブルビューを更新することができます最初のものを教えてください

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() 
    } 
} 

私の第二のコントローラが、次のエラー:

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

答えて

0

代理人のプロトコル名をMyPageControllerDelegateのように変更します。

+0

残念ながら、エラーは次のとおりです。 'MyPageControllerDelegate?'タイプのプロパティ 'delegate'タイプ 'NSPageControllerDelegate?'のプロパティをオーバーライドすることはできません。 (別名「オプション」) – northsea

0

NSPageControllerは既にNSPageControllerDelegateのプロパティdelegateを持っているようですが、PageControllerDelegateという名前のものが既にあるようです。 var delegate: PageControllerDelegate?を削除します。

+0

しかし、私は 'updateTableData()'をどう呼び出すのですか? func 'saveData'の' self.delegate'を介して 'NSPageControllerDelegate'にアクセスできますが、このデリゲートはfunc' updateTableData() 'を知らない。 – northsea

関連する問題