2016-07-19 55 views
0

我正在研究從網站獲取數據的應用程序。當用戶點擊主頁按鈕,然後再次打開應用程序(從後臺),我想重新加載數據到viewController。如何重新加載功能,如果你打回家,然後再次打開應用程序?

我嘗試下面的代碼:

在應用程序委託:

class AppDelegate: UIResponder, UIApplicationDelegate { 

    var myViewController: ViewController? 
    --------- 

    var myViewController: rootViewController? 
     func applicationDidEnterBackground(application: UIApplication) { 

     print("Goodbye world") //.... then whatever code after pressing the home button 
} 

func applicationWillEnterForeground(application: UIApplication) { 

    print("Hello World") 
    myViewController.ObtianData() // which is pretty much the func in my app that fetch data from the web and display it in tableView 

    } 

然後在視圖控制器viewDidLoad中

override func viewDidLoad() { 
    // I added the print to log here to check if the viewDidLoad function is being called but apparently it is not. 
    print ("Hello again from ViewController") 

    let appDelegate:AppDelegate = UIApplication.sharedApplication().delegate! as! AppDelegate 
    appDelegate.myViewController? = self 
} 

任何建議下?

+1

你有沒有嘗試過的代碼移入viewWillAppear中? – WMios

+0

是的,它也沒有爲我工作 – abha

回答

0

您應該使用NSNotificationCenter事件UIApplicationDidBecomeActiveNotification,它是爲此特別製作的。

(你並不需要使用的AppDelegate)

override func viewDidLoad() { 
    super.viewDidLoad() 

    NSNotificationCenter.defaultCenter().addObserver(
     self, 
     selector: @selector(applicationDidBecomeActive), 
     name: UIApplicationDidBecomeActiveNotification, 
     object: nil) 
} 

func obtianData() { 
    // do something 
} 

注意,快捷標準要求函數名,開始以小寫。

2

您遇到的問題的根本原因是您加載的數據附加到顯示它的視圖控制器。這違背了MVC原則,這表明該模型需要與控制器分離。

應重新組織類以這樣的方式ObtainData是模型和控制器之間的分裂:

  • 模型出去並獲得數據,
  • 控制器決定如何處理做數據。

建立一個叫做Model類(或選擇其他名稱與它Model)和數據存儲在它的表。通過Model.instance(即implement a Singleton in Swift)從各處靜態訪問該類的單個實例。

將您的視圖控制器更改爲依賴於Model.instance的數據,而不是將其存儲在內部。

這就是你需要做的分開你的應用程序的部分。現在您的問題可以用兩行代碼解決 - applicationWillEnterForeground應該調用Model.instance.obtainData,並且您的控制器的viewWillAppear應該在tableView上調用reloadData。與使用UIApplicationDidEnterBackgroundNotification和使用UIApplicationDidEnterBackgroundNotification

0

新增通知

相關問題