我在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(//自定义函数),但它显示致命错误..)
答案 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()
回调,您可以实施该回调。这具有覆盖更多情况的优势。