我有一个应用程序,可以动态更新UIApplicationShortcutItem
s 。问题是特定的快捷方式项目集取决于网络的状态(想想可达性、强制门户和 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 可能会使用户感到困惑。更好的方法应该是明确地通知用户在用户与应用程序交互时发生了什么。
抱歉,这可能无法真正帮助实现您想要的。