iOS 扩展 - 检测“扩展状态更改”(背景/前景)
Posted
技术标签:
【中文标题】iOS 扩展 - 检测“扩展状态更改”(背景/前景)【英文标题】:iOS Extension - Detect "extension state changes" (Background/Foreground) 【发布时间】:2014-10-06 18:08:17 【问题描述】:我为 ios8 实现了一个共享扩展。该服务使用 OAuth 进行身份验证。我用于扩展的登录信息与容器应用共享。
问题是:
当我在扩展程序中时,应用程序切换到容器应用程序并注销,然后应用程序切换回包含扩展程序的主机应用程序 - 我如何检测到扩展程序刚刚重新出现?扩展依赖于容器应用和扩展之间的共享数据库中存在的某些信息,但是,当应用注销时,这些数据会被删除。
我尝试注册各种“应用通知”,例如 UIApplicationDidBecomeActiveNotification。然而,正如预期的那样,这些并不需要扩展。
如何检测扩展程序的状态何时发生变化,以便让我的扩展程序在重新出现时更加健壮?
【问题讨论】:
【参考方案1】:你的主视图控制器类的viewDidAppear:animated:
方法应该在你每次重新进入你的扩展时被调用。当您即将离开时,应致电viewWillDisappear:animated:
。
【讨论】:
不幸的是,这不起作用。在这种特殊情况下(带有扩展)不会调用这些函数。【参考方案2】:见
NSExtensionContext.h
iOS 8.2 添加了许多通知用于扩展:
NSExtensionHostDidBecomeActiveNotification
NSExtensionHostDidEnterBackgroundNotification
NSExtensionHostWillEnterForegroundNotification
NSExtensionHostWillResignActiveNotification
【讨论】:
iOS 8.0 的解决方案? 我们没有调查过。我们已决定以 8.2+ 为目标并保留它。 你如何实际使用这些? [[NSNotificationCenter defaultCenter] addObserver:self 选择器:@selector(hostIsInForegroundNotification:) name:@"NSExtensionHostDidBecomeActiveNotification" object:nil];不会触发扩展中的选择器。这个答案不起作用。 我注意到的是,第一次将主机带入前台时,活动/前台不会触发。但它们确实会在您访问主机中的共享扩展后触发第二次等。以上是关于iOS 扩展 - 检测“扩展状态更改”(背景/前景)的主要内容,如果未能解决你的问题,请参考以下文章