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

Is it possible to determine when iOS widget hides?

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

通常,您的小部件将是一个 UIViewController 实例,符合 NCWidgetProviding 协议。 这意味着,您可以利用 UIViewController 的功能并在

中执行您的代码

- (void)viewWillDisappear:(BOOL)animated;

- (void)viewDidDisappear:(BOOL)animated;

我测试了它并且有效。

@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
        }
    })
}