gpt4 book ai didi

ios - 在处理上一个时接收另一个远程通知操作

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:13:20 24 4
gpt4 key购买 nike

我搜索了一会儿,没有看到相关的答案,只好另开一个问题。如有重复请指出。

当用户触摸 iOS 通知操作时,以下方法将发送到应用委托(delegate):

- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo withResponseInfo:(NSDictionary *)responseInfo completionHandler:(void (^)())completionHandler

根据文档,当应用程序处理完操作后,应该调用 completionHandler。所以如果进程是异步的,那么委托(delegate)方法可能是这样的:

- (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秒,模拟 Action 处理。

根据上面的设置,我采取了以下步骤:

  1. 执行操作1
  2. 在调用 action1 的 completionHandler 之前执行 action2。
  3. 调用action2的completionHandler后,执行action3

之后发现action3的completionHandlerNEVER被调用了,也就是说action3是NEVER处理的。

我在 iOS 9 中发现了这个,不确定其他 iOS 版本。这是为什么?我能做些什么来修复它?谢谢。

最佳答案

最后,我将 completionHandler 执行和异步执行代码放在这对 API 的中间:

- beginBackgroundTaskWithExpirationHandler:

- endBackgroundTask

确保 completionHandler 可以在我的序列中调用,并且当应用程序运行到后台模式时不会被挂起。

而且它有效。 ^_^

关于ios - 在处理上一个时接收另一个远程通知操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34012330/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com