// // MasterViewController.swift // swift01 // // Created by on 2020/8/18. // Copyright © 2020 admin. All rights reserved. // import UIKit class MasterViewController: UITableViewController { let dataSource = MainTableViewDataSource() var detailViewController: DetailViewController? = nil var objects = [Any]() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. navigationItem.leftBarButtonItem = editButtonItem setupNotificationObservers() let addButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(insertNewObject(_:))) navigationItem.rightBarButtonItem = addButton if let split = splitViewController { let controllers = split.viewControllers detailViewController = (controllers[controllers.count-1] as! UINavigationController).topViewController as? DetailViewController } } override func viewWillAppear(_ animated: Bool) { clearsSelectionOnViewWillAppear = splitViewController!.isCollapsed super.viewWillAppear(animated) } @objc func insertNewObject(_ sender: Any) { objects.insert(NSDate(), at: 0) let indexPath = IndexPath(row: 0, section: 0) tableView.insertRows(at: [indexPath], with: .automatic) } // MARK: - Segues override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "showDetail" { if let indexPath = tableView.indexPathForSelectedRow { // let object = objects[indexPath.row] as! NSDate let object = dreams[indexPath.row] let controller = (segue.destination as! UINavigationController).topViewController as! DetailViewController controller.detailItem = object controller.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem controller.navigationItem.leftItemsSupplementBackButton = true detailViewController = controller } } } // MARK: - Table View override func numberOfSections(in tableView: UITableView) -> Int { return 1 } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // return objects.count return dreams.count } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) // let object = objects[indexPath.row] as! NSDate // cell.textLabel!.text = object.description let dream: Dream dream = dreams[indexPath.row] cell.textLabel!.text = dream.description return cell } override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { // Return false if you do not want the specified item to be editable. return true } override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == .delete { objects.remove(at: indexPath.row) tableView.deleteRows(at: [indexPath], with: .fade) } else if editingStyle == .insert { // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view. } } } extension MasterViewController { fileprivate func setupNotificationObservers() { NotificationCenter.default.addObserver(self, selector: #selector(reloadTableView(_:)), name: .dataRetrieved, object: nil) } fileprivate func removeNotificationObserver() { NotificationCenter.default.removeObserver(self, name: .dataRetrieved, object: nil) } @objc fileprivate func reloadTableView(_ notification: Notification) { DispatchQueue.main.async { [unowned self] in print("====",self.dreams) self.tableView.reloadData() } } var dreams : [Dream] { return ApplicationData.DatabaseData.read() } }