是否可以确定iOS小部件何时隐藏?

时间:2015-07-30 14:17:52

标签: ios ios8 widget ios8-extension ios8-today-widget

有没有什么方法可以捕捉到用户使用窗口小部件隐藏通知面板的时刻?我想在那一刻将一些信息保存到数据库中(我希望它与applicationDidEnterBackground:类似)。关于如何在最后时刻保存数据的任何其他想法也将受到赞赏。

2 个答案:

答案 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
        }
    })
}