Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 动态UIApplicationShortcutItem是否在后台?_Ios_Ios9_3dtouch - Fatal编程技术网

Ios 动态UIApplicationShortcutItem是否在后台?

Ios 动态UIApplicationShortcutItem是否在后台?,ios,ios9,3dtouch,Ios,Ios9,3dtouch,我有一个应用程序,可以动态更新UIApplicationShortcutItems。关键在于,特定的快捷方式项目集取决于网络的状态、可达性、捕获门户和VPN状态等 当应用程序位于前台时,更新快捷方式项目很容易,但当应用程序位于后台时,我看不到任何明显和适当的时间来更新快捷方式项目。。。当然,网络状态也很容易改变 我是错过了什么,还是需要等到iOS 10- 我认为这个问题可以分为两部分:后台执行和动态更新快捷方式项 iOS后台执行仍然非常有限,比如:执行有限长度的任务,或者只允许特定类型的应用程序

我有一个应用程序,可以动态更新UIApplicationShortcutItems。关键在于,特定的快捷方式项目集取决于网络的状态、可达性、捕获门户和VPN状态等

当应用程序位于前台时,更新快捷方式项目很容易,但当应用程序位于后台时,我看不到任何明显和适当的时间来更新快捷方式项目。。。当然,网络状态也很容易改变


我是错过了什么,还是需要等到iOS 10-

我认为这个问题可以分为两部分:后台执行和动态更新快捷方式项

iOS后台执行仍然非常有限,比如:执行有限长度的任务,或者只允许特定类型的应用程序在后台运行更长的时间。可达性并不真正适合长时间运行的后台任务情况

正如您所提到的,动态更新快捷方式项目非常简单,如下所示:

// replace updateShortcutItemMethod and EventYouAreInterestedIn accordingly
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(<updateShortcutItemMethod>) name:<EventYouAreInterestedIn> object:nil];

- (void)updateShortcutItemWithType:(NSString *)type title:(NSString *)title subtitle:(NSString *)subtitle icon:(NSString *)icon
{
    NSMutableArray *shortcutItems = [NSMutableArray arrayWithArray:[UIApplication sharedApplication].shortcutItems];
    for (UIMutableApplicationShortcutItem *shortcutItem in shortcutItems) {
        if ([shortcutItem.type isEqualToString:type]) {
            UIMutableApplicationShortcutItem *updatedShortcutItem = [[UIMutableApplicationShortcutItem alloc] initWithType:type localizedTitle:title localizedSubtitle:subtitle icon:[self getIconFrom:icon] userInfo:nil];
            NSUInteger index = [shortcutItems indexOfObject:shortcutItem];
            [shortcutItems replaceObjectAtIndex:index withObject:updatedShortcutItem];
            [UIApplication sharedApplication].shortcutItems = shortcutItems;
        }
    }
}
除了技术方面,从用户体验的角度来看,在应用程序处于后台时更新UIApplicationShortcutItem并不是一个好主意

因为当应用程序在后台时,用户不在应用程序的上下文中,不会发生交互。在用户不知道为什么的情况下频繁更改UIApplicationShortcutItem可能会让用户感到困惑。更好的方法应该是在用户与应用程序交互时显式地通知用户发生了什么


很抱歉,这可能并不能真正帮助您实现目标。

这似乎是您问题的答案:永远不要假设人们没有很好的理由去做他们要求的事情。那太粗鲁了。动态更新快捷方式项目的一个例子是,它们何时应该根据当前日期进行更改,这正是我当前正在处理的情况。我确信还有其他依赖于时间的用例,以及您可能基于其他内容(如位置或互联网上的内容)进行更新的情况。