Ios 如果点击home然后再次打开应用程序,如何重新加载功能?

Ios 如果点击home然后再次打开应用程序,如何重新加载功能?,ios,swift,Ios,Swift,我正在开发一个从网站获取数据的应用程序。当用户点击home按钮,然后再次打开应用程序(从后台),我想再次将数据重新加载到viewController 我尝试了以下代码: 应用程序内代理: class AppDelegate: UIResponder, UIApplicationDelegate { var myViewController: ViewController? --------- var myViewController: rootViewController?

我正在开发一个从网站获取数据的应用程序。当用户点击home按钮,然后再次打开应用程序(从后台),我想再次将数据重新加载到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

   }
然后在ViewController中的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 
}

有什么建议吗?

您应该使用NSNotificationCenter事件UIApplicationIDBecomeActivityfication,它是专门为此提出的

(您不需要使用AppDelegate)


请注意,swift标准要求函数名以小写字母开头。

您应该使用NSNotificationCenter事件UIApplicationIDBECOMEACTIVENotification,它是专门为此而设计的

(您不需要使用AppDelegate)


请注意,swift标准要求函数名以小写字母开头。

出现问题的根本原因是加载的数据附加到显示它的视图控制器。这与MVC原则背道而驰,MVC原则认为模型需要与控制器分离

您应该以这样的方式重新组织类:
actaindata
在模型和控制器之间分割:

  • 模型出来获取数据
  • 控制器决定如何处理数据
创建一个名为
Model
的类(或者选择其中包含
Model
的其他名称),并将表的数据存储在其中。使该类的单个实例通过
Model.instance
(即)从任何地方静态访问

将视图控制器更改为依赖
Model.instance
获取其数据,而不是将其存储在内部


这就是你需要做的所有事情来分离你的应用程序的各个部分。现在,您的问题只需两行代码即可解决-
应用程序将进入前台
应调用
Model.instance.ActainData
,控制器的
视图将出现
应在其
表视图上调用
重新加载数据

出现问题的根本原因是加载的数据连接到显示它的视图控制器。这与MVC原则背道而驰,MVC原则认为模型需要与控制器分离

您应该以这样的方式重新组织类:
actaindata
在模型和控制器之间分割:

  • 模型出来获取数据
  • 控制器决定如何处理数据
创建一个名为
Model
的类(或者选择其中包含
Model
的其他名称),并将表的数据存储在其中。使该类的单个实例通过
Model.instance
(即)从任何地方静态访问

将视图控制器更改为依赖
Model.instance
获取其数据,而不是将其存储在内部


这就是你需要做的所有事情来分离你的应用程序的各个部分。现在,您的问题只需两行代码即可解决-
应用程序将进入前台
应调用
Model.instance.ActainData
,控制器的
视图将出现
应在其
表视图上调用
重新加载数据

使用UIApplicationIdentinterBackgroundNotification和UIApplicationIdentinterBackgroundNotification添加通知

使用UIApplicationIdentinterBackgroundNotification和UIApplicationIdentinterBackgroundNotification

您尝试过将代码移动到ViewWillDisplay吗?是的,它对我无效。您尝试过将代码移动到ViewWillDisplay吗?是的,它对我也无效
override func viewDidLoad() {
    super.viewDidLoad()

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

func obtianData() {
    // do something
}