调用performActionForShortcutItem与applicationWillEnterForeground的顺序

时间:2016-02-07 22:45:40

标签: ios objective-c 3dtouch

所以,我有一个具有服务器状态的应用程序,我按超时值刷新它并在applicationWillEnterForeground中检查超时,如果超时已到期则重新加载。 到目前为止,这种方法运作良好。

我现在想要实现执行服务器操作的新力触摸快捷操作。但是,我不希望状态获取操作与快捷操作同时发生。当应用程序通过快捷方式启动时,但从非活动状态转换时,这不是问题 - >活跃的,我最终可以在applicationWillEnterForeground中启动一个服务器操作,在performActionForShortcutItem中启动另一个服务器操作,这不是最佳的。

我所追求的是,​​如果应用程序(重新)因强制触摸按下而启动,则仅可能刷新我的状态。

我以为我会用bool解决这个问题,“isHandlingShortcut”我在performActionForShortcutItem中设置然后检入applicationWillEnterForeground,在这种情况下跳过我的刷新 - 但事实证明它没有首先调用applicationWillEnterForeground以来的工作!

是否有任何方法,我可以通过applicationWillEnterForeground中的快捷方式找到我(重新)推出的应用程序?

编辑:也许我可以将“刷新”-logic移到applicationDidBecomeActive?那个是在performActionForShortcutItem之后调用的。

1 个答案:

答案 0 :(得分:0)

根据文件:

  

[...]启动时检查您的应用是否通过快速启动   行动。执行此检查   application:willFinishLaunchingWithOptions:或   application:didFinishLaunchingWithOptions:方法通过检查   UIApplicationLaunchOptionsShortcutItemKey启动选项键。该   UIApplicationShortcutItem对象可用作值的值   启动选项键。

https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1622935-application

我正在做的是检查didFinishLaunchingWithOptions中的快捷方式,以便稍后performActionForShortcutItem我知道该应用是否因快捷方式启动或应用已启动。

didFinishLaunchingWithOptions中(如果shourtcut启动应用程序,则执行):

self.launchShortcutItem = launchOptions[UIApplicationLaunchOptionsShortcutItemKey];

稍后在performActionForShortcutItem

if (self.launchShortcutItem) {
    // app launched due to shortcut
} else {
    // app was already launched
}