0

我正在尝试使用该方法调用该reloadData()方法来更新外部类(不同的视图控制器)中的表视图viewDidDisappear()

当它所在的视图被加载或出现时,我已经可以更新表视图:

class OrderHistoryController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    
    @IBOutlet var orderTable: UITableView!
    
    //called when order table is loaded or appears
    override func viewDidLoad() {
        super.viewDidLoad()
        self.orderTable.delegate = self
        self.orderTable.dataSource = self
        self.orderTable.reloadData()
    }
    override func viewDidAppear(_ animated: Bool) {
        self.orderTable.delegate = self
        self.orderTable.dataSource = self
        self.orderTable.reloadData()
    }
    // ...
}

但是我希望在另一个视图消失时重新加载表。

class OrderDocumentationController: UIViewController {
      
    override func viewDidDisappear(_ animated: Bool) {
        OrderHistoryController().orderTable.reloadData()
        return
    }
    // ...
}

我收到致命错误:

在隐式展开 Optional 值时意外发现 nil。

猜猜这只是一个菜鸟的错误。有任何想法吗?先感谢您!

4

2 回答 2

0

当您调用 时OrderHistoryController().orderTable.reloadData(),这将创建一个新OrderHistoryController实例,该实例将没有orderTable连接插座,因此导致崩溃。

有不同的方法来实现你想要的:

  • 存储对OrderHistoryController实例的引用并使用它
  • 也许更好:实现一些自定义委托机制
  • 使用NotificationCenter发送消息,然后将导致刷新
于 2020-08-23T16:48:47.617 回答
0

如果 OrderDocumentationController 消失时出现 OrderHistoryController,则无需重新加载 orderTable。因为,在 OrderHistoryController::viewDidAppear() 中调用了 self.orderTable.reloadData()

更新:

更好的方法是让 OrderDocumentationController 提供一个在模态控制器完成时调用的块。

因此,在 OrderDocumentationController 中,提供一个名为 onDoneBlock 的块属性。

在 OrderHistoryController 中,您呈现如下:

  • 在 OrderHistoryController 中,创建 OrderDocumentationController

  • 将 OrderDocumentationController 的完成处理程序设置为: OrderDocumentationController.onDoneBlock={[OrderDocumentationControllerdismissViewControllerAnimated:YES completion:nil]};

  • 使用 [self OrderDocumentationController animated:YES completion:nil] 正常显示 OrderDocumentationController 控制器;

  • 在 OrderDocumentationController 中,在取消目标操作中调用 self.onDoneBlock();

结果是 OrderDocumentationController 告诉提出它的人它已经完成。您可以扩展 onDoneBlock 以具有指示模式是否完成、取消、成功等的参数。

于 2020-08-23T17:01:13.503 回答