iOS扩展 - 检测“扩展状态更改”(后台/前台)

6
我已经为iOS8实现了共享扩展。该服务使用OAuth进行身份验证。我在扩展中使用的登录信息与容器应用程序共享。
问题是:
当我在扩展中时,应用程序切换到容器应用程序并注销,然后应用程序切换回包含扩展的主机应用程序 - 我如何检测到扩展刚刚重新出现?扩展依赖于容器应用程序和扩展之间共享的数据库中存在某些信息,但是在应用程序注销时,该数据被删除。
我尝试注册各种“应用程序通知”,例如UIApplicationDidBecomeActiveNotification。但是,正如预期的那样,这些通知不适用于扩展。
如何检测扩展状态的更改,以便在其重新出现时使我的扩展更加健壮?
2个回答

1

请查看

NSExtensionContext.h

iOS 8.2增加了一些通知供扩展使用:

NSExtensionHostDidBecomeActiveNotification
NSExtensionHostDidEnterBackgroundNotification
NSExtensionHostWillEnterForegroundNotification
NSExtensionHostWillResignActiveNotification

iOS 8.0的解决方案是什么? - Paulius Vindzigelskis
我们调查了一下,但没有找到合适的解决方案。我们决定以8.2及以上版本为目标,就这样吧。 - Martin-Gilles Lavoie
你实际上如何使用这些? - coolcool1994
1
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hostIsInForegroundNotification:) name:@"NSExtensionHostDidBecomeActiveNotification" object:nil]; 在扩展中不会触发选择器。 这个答案不起作用。 - coolcool1994
我注意到的是,活动/前台的不会在第一次将主机带入前台时触发。但是在您访问主机中的共享扩展之后,它们会在第二次等等触发。 - Chris Prince

-1
你的主视图控制器类的 viewDidAppear:animated: 方法应该在每次重新进入扩展时被调用。当你即将离开时,应该调用 viewWillDisappear:animated:

1
很遗憾,这不起作用。在这种特定情况下(使用扩展名),这些函数没有被调用。 - Adam Zielinski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接