如何在数据更改时调用函数?
我的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(//自定义函数),但它显示出致命的错误。)
当你的数据库被重新加载时,你会得到一个application(_:open:options:)
调用,这似乎很奇怪。当外部应用程序告诉您的应用程序打开URL时,该功能将被调用。
如果确实如此,您需要一种方法从应用程序代理向任何关心的人发送消息。我会建议定义和使用一个NotificationCenter
消息。有一个包含表视图调用addObserver(forName:object:queue:using:)
视图控制器(或addObserver(_:selector:name:object:)
,但第一味更斯威夫特等。)在你的application(_:open:options:)
方法
然后,使用`后(名称:对象:用户信息:)或一个它是在调用URL open方法时广播通知的变体。
(一般来说,应用程序委托应尽可能少地包含特定于应用程序的业务逻辑。通过使用NotificationCenter
,您可以编写应用程序委托,以便它不知道或在意哪些视图控制器需要通知有关传入Open URL命令。)
感谢您回答我的问题。当应用程序(_:打开:选项:)被称为数据库已重新加载,因为我在那里编码。哈哈我认为我不擅长英语,所以你误解了我的问题。:) –
这不是从
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
首先,重装表很好的做法,我相信你的来自数据库的数据不会被加载到这个方法中,而是在你从服务器或甚至从本地数据库获取数据的代码的其他部分。在这两种情况下,你都可以使用完成处理程序,当你完成数据提取时重新加载表来自DB。另外,如果你想从AppDelegate重载表,你应该在AppDelegate中引用一个UITableView,这不是一个好习惯。你也许可以使用通知或委托方法,但这两种方法都不适合这种情况。
您正在关注错误的委托方法。当然,在应用程序生命周期中,您将获得加载URL事件,但这是一个视图问题。当你的应用程序重新打开屏幕上的相关视图,你会也得到一个viewWillAppear()
回调,你可以实现。这具有涵盖更多情况的优点。
感谢评论,这对我来说是非常有用的信息。 你的意思是viewWillAppear()在获取加载URL事件后被触发? –
您可以使用'NSNotificationCenter',查看这篇文章中关于如何使用它: http://dev.iachieved.it/iachievedit/notifications-and-userinfo-with-swift-3-0/ –
@ MoeAbdul- Hameed嘿...真的非常感谢...这是最好的答案 –
不客气!我很高兴它帮助你在别人的帮助下;) –