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