viewController 关闭时调用的函数(当应用程序退出时)?

Posted

技术标签:

【中文标题】viewController 关闭时调用的函数(当应用程序退出时)?【英文标题】:Function called on viewController close (when application exit)? 【发布时间】:2015-06-25 08:02:11 【问题描述】:

我正在寻找一个在应用程序退出时在UIViewController 上调用的函数。

我用viewWillDisappearapplicationWillTerminate 进行了尝试,但没有任何效果。

我想在此函数中保存来自UIViewController 的设置。

【问题讨论】:

【参考方案1】:

就像@Jeff 说的,但是

在 Swift 3 中:

override func viewDidLoad () 
  super.viewDidLoad()

  NotificationCenter.default.addObserver(self, selector: #selector(suspending), name: NSNotification.Name.UIApplicationWillResignActive, object: nil)
  NotificationCenter.default.addObserver(self, selector: #selector(suspending), name: NSNotification.Name.UIApplicationWillTerminate, object: nil)


func suspending () 
  print("suspending...")

UIApplicationWillResignActive 发生在应用程序被换出时,而 UIApplicationWillTerminate 在退出时触发,例如按下 Home 键时。

【讨论】:

【参考方案2】:

您需要注册通知以了解在应用终止时何时进行了适当的调用。

NSNotificationCenter .defaultCenter() .addObserver(self, selector: Selector("callBack"), name: UIApplicationWillResignActiveNotification, object: nil)
NSNotificationCenter .defaultCenter() .addObserver(self, selector: Selector("callBack"), name: UIApplicationWillTerminateNotification, object: nil)

func callback() 
  // Save your settings

记得删除viewWillDisappear:中的观察者

override func viewWillDisappear(animated: Bool) 
  super.viewWillDisappear(animated)
  NSNotificationCenter .defaultCenter() .removeObserver(self)

【讨论】:

我在 viewDidLoad 函数 NSNotificationCenter .defaultCenter() .addObserver(self, selector: Selector("saveWorkingState"), name: UIApplicationWillResignActiveNotification, object: nil) NSNotificationCenter .defaultCenter() 中添加了代码。 addObserver(self, selector: Selector("saveWorkingState"), name: UIApplicationWillTerminateNotification, object: nil) 但永远不会调用“public func saveWorkingState()”。我用一个按钮试了一下,我在上面调用了退出函数(在模拟器中) exit(0) 不应用于测试应用程序是否终止。这将立即杀死应用程序,而不会发生任何适当的关闭。只需按 Cmd + Shift + H 即可触发按下主页按钮。【参考方案3】:

你可以在 ViewController 中调用 deinit

deinit 
   deleteUnsavedPhotoFromServer()

【讨论】:

【参考方案4】:

斯威夫特 5.5

用于应用输入背景

NotificationCenter.default.addObserver(self, selector: #selector(appResignActiveNotify), name: UIApplication.willResignActiveNotification, object: nil)
        
 @objc func appResignActiveNotify() 
       //called when App enter background
   

对于应用程序终止

NotificationCenter.default.addObserver(self, selector: #selector(appTerminateNotify), name: UIApplication.willTerminateNotification, object: nil)
        
  @objc func appTerminateNotify() 
       //called when Terminate
   

【讨论】:

以上是关于viewController 关闭时调用的函数(当应用程序退出时)?的主要内容,如果未能解决你的问题,请参考以下文章

创建一个 UIView 子类,当它的父 viewController 出现时调用委托函数?

iOS9:UIViewController:当 viewController 在第二个 UIWindow 中运行时,不会在拆分视图更改时调用 viewWillTransitionToSize

当用户点击屏幕上的任意位置时调用函数

在编译时调用的 Python 装饰器函数

字典值作为访问键时调用的函数,而不使用“()”

失败时调用的成功回调函数。可能的错误?