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

时间:2017-09-04 21:53:45

标签: ios swift uitableview observers

我在main.swift中有tableview 如果

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(//自定义函数),但它显示致命错误..)

3 个答案:

答案 0 :(得分:0)

重新加载表格不是一个好习惯
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {

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

另外,如果你想从AppDelegate重新加载表,你应该在AppDelegate中引用一个UITableView,这不是一个好习惯。您可以使用通知或委托方法,但对于这种情况,这两种方法都不是很好的做法。

答案 1 :(得分:0)

在重新加载数据库时,您会收到application(_:open:options:)电话,这似乎很奇怪。当外部应用程序通知您的应用打开URL时,将调用该函数。

如果确实如此,您需要一种方法从您的应用代表那里收到任何关心的消息。我建议定义和使用NotificationCenter消息。让包含表视图的视图控制器调用addObserver(forName:object:queue:using:)(或addObserver(_:selector:name:object:),但第一种风格更像Swift。)

然后在你的application(_:open:options:)方法中,使用`post(name:object:userInfo :)或其中一个变种来在调用URL open方法时广播通知。

(通常,app委托应该尽可能少地使用特定于应用程序的业务逻辑。通过使用NotificationCenter,您可以编写应用程序委托,以便它不知道或关心哪个视图控制器需要通知有关传入的Open URL命令。)

答案 2 :(得分:0)

您正在关注错误的委托方法。当然,在App生命周期内,您将获得加载URL事件,但这是一个视图问题。当您使用屏幕上的相关视图重新打开应用程序时,您将获得viewWillAppear()回调,您可以实施该回调。这具有覆盖更多情况的优势。