2017-09-04 98 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事件後被觸發? –

相關問題