2017-09-04 101 views
0

我的tableview在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(//自定义函数),但它显示出致命的错误。)

+0

您可以使用'NSNotificationCenter',查看这篇文章中关于如何使用它: http://dev.iachieved.it/iachievedit/notifications-and-userinfo-with-swift-3-0/ –

+0

@ MoeAbdul- Hameed嘿...真的非常感谢...这是最好的答案 –

+0

不客气!我很高兴它帮助你在别人的帮助下;) –

回答

0

当你的数据库被重新加载时,你会得到一个application(_:open:options:)调用,这似乎很奇怪。当外部应用程序告诉您的应用程序打开URL时,该功能将被调用。

如果确实如此,您需要一种方法从应用程序代理向任何关心的人发送消息。我会建议定义和使用一个NotificationCenter消息。有一个包含表视图调用addObserver(forName:object:queue:using:)视图控制器(或addObserver(_:selector:name:object:),但第一味更斯威夫特等。)在你的application(_:open:options:)方法

然后,使用`后(名称:对象:用户信息:)或一个它是在调用URL open方法时广播通知的变体。

(一般来说,应用程序委托应尽可能少地包含特定于应用程序的业务逻辑。通过使用NotificationCenter,您可以编写应用程序委托,以便它不知道或在意哪些视图控制器需要通知有关传入Open URL命令。)

+0

感谢您回答我的问题。当应用程序(_:打开:选项:)被称为数据库已重新加载,因为我在那里编码。哈哈我认为我不擅长英语,所以你误解了我的问题。:) –

0

这不是从

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

首先,重装表很好的做法,我相信你的来自数据库的数据不会被加载到这个方法中,而是在你从服务器或甚至从本地数据库获取数据的代码的其他部分。在这两种情况下,你都可以使用完成处理程序,当你完成数据提取时重新加载表来自DB。另外,如果你想从AppDelegate重载表,你应该在AppDelegate中引用一个UITableView,这不是一个好习惯。你也许可以使用通知或委托方法,但这两种方法都不适合这种情况。

0

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

+0

感谢评论,这对我来说是非常有用的信息。 你的意思是viewWillAppear()在获取加载URL事件后被触发? –

相关问题