iOS开发 --- 推送 SDK: Main Thread Checker: UI API called on a background thread

本文解决Xcode9升级后,在后台线程调用UIKit等API导致的MainThreadChecker错误。介绍如何确保通知权限请求等操作在主线程执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Xcode 升级到 Xcode 9后,集成时若提示下述错误:

  1. Main Thread Checker: UI API called on a background thread

请检查工程中,是否在后台线程(非主线程)调用 AppKit、UIKit相关的API,比如iOS 10+ 请求通知权限时,[application registerForRemoteNotifications];在回调非主线程中执行,则Xcode 9会报上述错误。

  1. [_notificationCenter requestAuthorizationWithOptions:UNAuthorizationOptionAlert | UNAuthorizationOptionBadge | UNAuthorizationOptionSound completionHandler:^(BOOL granted, NSError * _Nullable error) {
  2. if (granted) {
  3. // granted
  4. NSLog(@"User authored notification.");
  5. // 向APNs注册,获取deviceToken
  6. [application registerForRemoteNotifications];
  7. } else {
  8. // not granted
  9. NSLog(@"User denied notification.");
  10. }
  11. }];

应修改为:

  1. [_notificationCenter requestAuthorizationWithOptions:UNAuthorizationOptionAlert | UNAuthorizationOptionBadge | UNAuthorizationOptionSound completionHandler:^(BOOL granted, NSError * _Nullable error) {
  2. if (granted) {
  3. // granted
  4. NSLog(@"User authored notification.");
  5. // 向APNs注册,获取deviceToken
  6. dispatch_async(dispatch_get_main_queue(), ^{
  7. [application registerForRemoteNotifications];
  8. };
  9. } else {
  10. // not granted
  11. NSLog(@"User denied notification.");
  12. }
  13. }];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值