数据更改时如何调用函数?

how can i call function when data changed?

我在 main.swift 中有表格视图 如果

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {

被调用(在 appdelegate 中)我的数据库获取新数据。

但我的观点没有改变,因为我没有打电话给 tableview.reloadData

所以我的问题是如何在

之后调用 tableview.reloadData
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {

打电话了。 (我试过 Main().myreload(//自定义函数)但它显示致命错误..)

重新加载 table 不是好的做法
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {

首先,我相信您的数据库中的数据不会在此方法中加载,而是在您从服务器甚至本地数据库中提取数据的代码的其他部分中在这两种情况下,您都可以使用完成处理程序,当您完成从数据库中提取数据时重新加载 table。

此外,如果您想从 AppDelegate 重新加载 table,您应该在 AppDelegate 中引用 UITableView,这不是好的做法。您也许可以使用通知或委托方法,但它们都不是这种情况下的好习惯。

当您的数据库重新加载后,您会收到一个 application(_:open:options:) 电话,这似乎很奇怪。当外部应用程序告诉您的应用程序打开 URL.

时,将调用该函数

如果这是真的,那么您需要一种方法来从您的应用程序委托中向任何关心的人发送消息。我建议定义和使用 NotificationCenter 消息。让视图控制器包含 table 视图调用 addObserver(forName:object:queue:using:)(或 addObserver(_:selector:name:object:),但第一种风格更像 Swift。)

然后在您的 application(_:open:options:) 方法中,使用 `post(name:object:userInfo:) 或其变体之一在调用 URL open 方法时广播通知.

(一般来说,app delegate 中应该包含尽可能少的特定于 app 的业务逻辑。通过使用 NotificationCenter,您可以编写您的 app delegate,这样它就不知道或不关心哪个视图控制器需要收到有关传入的 Open URL 命令的通知。)

您正在关注错误的委托方法。当然,在 App 生命周期内你会得到 load URL 事件,但这是一个视图问题。当您的应用程序重新打开并在屏幕上显示相关视图时,您将 获得一个 viewWillAppear() 回调,您可以实现该回调。这样的好处是可以覆盖更多的情况。