如何解决如何在共享应用程序扩展中获取当前窗口?
我正在开发 iMessage 应用扩展程序,出于某些原因,我需要在此扩展程序中获取应用程序窗口。以前我是这样做的,如下所述:-
guard let currentwindow : UIWindow = UIApplication.shared.keyWindow else {return}
在 xcode 12 中它运行良好。另一方面,更新到 12.5.1 后,这开始给我相同的代码错误。 如下:-
其次,我无法调用 UIApplication.shared.canopenURL(settingsUrl)
解决方法
您可以执行以下操作来测试从您的扩展程序对 UIApplication.shared
的访问:
guard UIApplication.responds(to: NSSelectorFromString("sharedApplication")) else {
return
}
let shared = UIApplication.perform(NSSelectorFromString("sharedApplication"))?.takeUnretainedValue() as? UIApplication
通过使用 perform
,您可以忽略编译器并在运行时确定您的调用。
请注意,这可能不适用于您的扩展程序。 API 不允许您默认从扩展程序访问它是有原因的,即使它在普通应用中运行良好也是如此。
您拨打 UIApplication.shared.open
也是如此。
所以最后,您可能无法使用 UIApplication.shared
。主要区别在于扩展程序与应用程序。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。