有没有什么方法可以捕捉到用户使用窗口小部件隐藏通知面板的时刻?我想在那一刻将一些信息保存到数据库中(我希望它与applicationDidEnterBackground:
类似)。关于如何在最后时刻保存数据的任何其他想法也将受到赞赏。
答案 0 :(得分:3)
通常,您的窗口小部件将是UIViewController
实例,符合NCWidgetProviding
协议。
这意味着,您可以利用UIViewController
的功能并在
- (void)viewWillDisappear:(BOOL)animated;
或
- (void)viewDidDisappear:(BOOL)animated;
我测试了它并且有效。
答案 1 :(得分:3)
@Andrew是正确的,当您的窗口小部件离开屏幕时将调用正常的UIViewController
生命周期方法,但此后不久您的控制器也将被释放,并且其进程将被暂停。因此,如果您需要执行一些I / O,则无法保证它将完成。
保持扩展程序处于活动状态的推荐方法是使用performExpiringActivityWithReason:usingBlock:
请求任务声明。
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
NSProcessInfo.processInfo().performExpiringActivityWithReason("because", usingBlock: { (expired) -> Void in
if expired {
NSLog("expired")
} else {
// save state off to database
}
})
}