检查应用程序是否通过 iOS 上的今日小部件启动...?
Check if app launched via today widget on iOS...?
当我使用此方法从 Today Extension
打开 App
时:
open func open(_ URL: URL, completionHandler: ((Bool) -> Void)? = nil)
我的应用程序的生命周期是这样的:
- didFinishLaunchingWithOptions
- viewDidLoad(初始ViewController)
- openURL
这让我很烦,因为我想将我的 launchState
变量设置为 widget 并在我的 initial 中执行自定义逻辑 ViewController
如果 openURL
方法是最后一个触发的,我不能。
我该如何处理这种情况?
编辑:
用户可以从 Today Extension 或 Classic launch 打开应用程序。
在根 ViewController 的 viewDidLoad
中,我正在这样做:
fileprivate func prepareCityToLaunch() {
switch launchState {
case .widget:
launchCity.getWidgetCity()
case .classic:
launchCity.getLaunchCity()
}
}
这是一个枚举,默认设置为.classic
,我在openURL方法中设置为.widget
。
此方法return适当的City
对象请求感谢代表团。
我等不及 openURL
的 Notification
因为在这个 viewController
我还不知道应用程序是从 Widget
还是从Classic
launch 并且由于 launchState 默认设置为 classic,所以它将始终获取城市,就像 App 以 classic 方式启动一样。
这就是为什么我想先在 openURL 方法中设置 launchState,然后在我的 viewDidLoad 中一切都会正确设置。
可以理解吗?
您需要在 vc 中显示一个 loader/empty 值,然后使用 openURL
中的 NSNotificationCenter
来设置所需的值
或
在您的应用程序和小部件之间设置一个套件共享用户默认值以了解这一点并在指向应用程序的行之前为其赋值,并检查它在 [=22= 的 viewDidLoad
中的值] ,然后将其设置为 nil
这是一个更好的替代解决方案。
在 didFinishLaunchingWithOptions
中添加以下行并检查您今天的小部件的包标识符。
if let value = launchOptions?[UIApplication.LaunchOptionsKey.sourceApplication] as? String, value == "com.company.app.todayWidget" {
//Launched via today widget
}
当我使用此方法从 Today Extension
打开 App
时:
open func open(_ URL: URL, completionHandler: ((Bool) -> Void)? = nil)
我的应用程序的生命周期是这样的:
- didFinishLaunchingWithOptions
- viewDidLoad(初始ViewController)
- openURL
这让我很烦,因为我想将我的 launchState
变量设置为 widget 并在我的 initial 中执行自定义逻辑 ViewController
如果 openURL
方法是最后一个触发的,我不能。
我该如何处理这种情况?
编辑:
用户可以从 Today Extension 或 Classic launch 打开应用程序。
在根 ViewController 的 viewDidLoad
中,我正在这样做:
fileprivate func prepareCityToLaunch() {
switch launchState {
case .widget:
launchCity.getWidgetCity()
case .classic:
launchCity.getLaunchCity()
}
}
这是一个枚举,默认设置为.classic
,我在openURL方法中设置为.widget
。
此方法return适当的City
对象请求感谢代表团。
我等不及 openURL
的 Notification
因为在这个 viewController
我还不知道应用程序是从 Widget
还是从Classic
launch 并且由于 launchState 默认设置为 classic,所以它将始终获取城市,就像 App 以 classic 方式启动一样。
这就是为什么我想先在 openURL 方法中设置 launchState,然后在我的 viewDidLoad 中一切都会正确设置。
可以理解吗?
您需要在 vc 中显示一个 loader/empty 值,然后使用 openURL
中的 NSNotificationCenter
来设置所需的值
或
在您的应用程序和小部件之间设置一个套件共享用户默认值以了解这一点并在指向应用程序的行之前为其赋值,并检查它在 [=22= 的 viewDidLoad
中的值] ,然后将其设置为 nil
这是一个更好的替代解决方案。
在 didFinishLaunchingWithOptions
中添加以下行并检查您今天的小部件的包标识符。
if let value = launchOptions?[UIApplication.LaunchOptionsKey.sourceApplication] as? String, value == "com.company.app.todayWidget" {
//Launched via today widget
}