【发布时间】:2015-12-01 03:57:37
【问题描述】:
我搜索了一段时间,没有看到任何相关的答案,所以我必须打开一个新问题。如有重复请指出。
当用户触摸 iOS 通知操作时,会向应用委托发送以下方法:
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo withResponseInfo:(NSDictionary *)responseInfo completionHandler:(void (^)())completionHandler
根据文档,当应用程序处理完动作后,应该调用completionHandler。所以如果进程是异步的,那么委托方法可能是这样的:
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo withResponseInfo:(NSDictionary *)responseInfo completionHandler:(void (^)())completionHandler {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
sleep(5);
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"completed with notification %@", userinfo);
completionHandler();
});
});
}
这里,全局队列休眠 5 秒以模拟动作处理。
通过上面的设置,我采取了以下步骤:
- 执行操作1
- 执行action2 之前调用action1的completionHandler。
- action2的completionHandler被调用后,执行action3
之后发现action3的completionHandlerNEVER被调用,也就是说action3被NEVER处理了。
我在 iOS 9 中发现了这个,不确定其他 iOS 版本。 这是为什么?我能做些什么来修复它?谢谢。
【问题讨论】:
标签: ios objective-c notifications