我想在我的iOS应用程序终止时执行一段代码(applicationWillTerminate不能一直工作)。
我想做的是每当应用终止时,我想取消本地通知并依靠推送通知,因为我的本地通知内容是动态的,当应用处于前台或后台时,它会通过静默通知进行更新。 附言本地通知每10分钟触发一次,因此不能一直依赖推送通知。
谢谢。
答案 0 :(得分:0)
applicationWillTerminate。因此,用户必须必须双击Home按钮并抛出应用程序才能执行applicationWillTerminate操作。
感谢@Cristik进行纠正。
Note:- applicationWillTerminate is not called when the user quits the app if the app supports background execution.
您可以检查以下内容:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
if UserDefaults.standard.bool(forKey: "terminated") {
DispatchQueue.main.async {
let alertView: UIAlertController = UIAlertController.init(title: "Prompt", message: "App was terminated earlier", preferredStyle: .alert)
let alertAction = UIAlertAction(title: "Done", style: .cancel) { (action:UIAlertAction) in
UserDefaults.standard.removeObject(forKey: "terminated")
UserDefaults.standard.synchronize()
}
alertView.addAction(alertAction)
self.window?.rootViewController?.present(alertView, animated: true, completion: nil)
}
}
return true
}
func applicationWillTerminate(_ application: UIApplication) {
UserDefaults.standard.set(true, forKey: "terminated")
UserDefaults.standard.synchronize()
}
答案 1 :(得分:0)
在某些情况下,iOS会终止您的应用程序。例如,如果您的应用处于暂停模式(处于后台且未执行代码),并且iOS设备中存在内存不足的情况。在这种情况下,iOS开始根据其规则终止应用程序。无论如何,在这种情况下,您不会收到有关应用终止的任何回调形式的操作系统。
但是有一条线索可能会对您有所帮助。 现在假设您已在Xcode中启用了一种后台模式功能,例如蓝牙。在这种情况下(您的应用程序之前已被iOS终止),如果发生了相关的蓝牙事件,则iOS会再次运行您的应用程序,并告诉您的应用程序该操作系统运行该应用程序的原因是什么。此信息存储在此功能的LunchOptions中:
application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil)
使用这些信息,您可以决定在应用程序运行开始时要做什么。