我有一个应用程序,可以动态更新UIApplicationShortcutItem
。问题在于,特定的快捷项集取决于网络的状态(想想可达性,强制门户和VPN状态等)。
当应用程序在前台时,很容易更新快捷项目,但是当应用程序在后台时,我没有看到任何明显和适当的时间...当然,网络状态可以也很容易改变。
我错过了什么,还是我需要等到iOS 10? : - )
答案 0 :(得分:0)
我认为这个问题可以分为两部分:后台执行& 动态更新快捷方式。
恕我直言,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可能会使用户感到困惑。更好的方法是在用户与应用程序交互时明确告知用户正在发生的事情。
抱歉,这可能无法帮助您实现目标。