Как я могу получить ссылку на контроллер основного вида? - PullRequest
0 голосов
/ 07 мая 2018

В одном представлении я внес некоторые изменения в свою базу данных основных данных, которая отображается в таблице в главном контроллере представления. После внесения этих изменений я хочу отобразить таблицу reloadData() для отображения новых записей, которые я добавил, но не могу найти способ получить ссылку на нее для вызова функции.

Я пробовал это:

let window = NSApplication.shared.mainWindow

Думая, что если бы я мог получить окно, я мог бы получить его контроллер вида, но по какой-то причине window равно nil. Я чувствую, что это должно быть простым делом, но я не могу найти способ сделать это.

Если это невозможно или есть лучший способ сделать то, что я пытаюсь сделать, это тоже будет полезно.

РЕДАКТИРОВАТЬ: Не знаю почему, но NSApplication.shared.mainWindow больше не возвращает nil, но окно вида, в котором я на самом деле вносил изменения (не главное ViewController окно)

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Одним из решений является создание ссылки на контроллер основного вида в AppDelegate

var mainViewController : MainViewController?

Установить свойство в viewDidLoad из MainViewController

override viewDidLoad() {
    super.viewDidLoad()
    let appDelegate = NSApp.delegate as! AppDelegate
    appDelegate.mainViewController = self
}

Тогда вы можете перезагрузить табличное представление отовсюду

let appDelegate = NSApp.delegate as! AppDelegate
appDelegate.mainViewController?.tableView.reloadData()
0 голосов
/ 07 мая 2018

Я думаю, что вы должны использовать NotificationCenter, как показано ниже

class MainController:UIViewController {

    @IBOutlet weak var tableview:UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        NotificationCenter.default.addObserver(self, selector: #selector(reload), name: NSNotification.Name("dataUpdated"), object: nil)
    }

    deinit {
        NotificationCenter.default.removeObserver(self, name: NSNotification.Name("dataUpdated"), object: nil)
    }

    @objc func reload() {
        tableview.reloadData()
    }
}

Используйте

// после изменения кордаты просто отправьте уведомление.

NotificationCenter.default.post(name: NSNotification.Name("dataUpdated"), object: nil)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...