热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

必须仅从主线程调用UIApplication.registerForRemoteNotifications()

如何解决《必须仅从主线程调用UIApplication.registerForRemoteNotifications()》经验,为你挑选了4个好方法。

Xcode 9(iOS 11)在注册Push(远程)通知时向我显示错误/警告.

这是错误消息

在此输入图像描述

这是代码,我尝试过:

let center  = UNUserNotificationCenter.current()
center.delegate = self
center.requestAuthorization(options: [.sound, .alert, .badge]) { (granted, error) in
        if error == nil{
              UIApplication.shared.registerForRemoteNotifications()
        }
 }

错误/警告线:

UIApplication.shared.registerForRemoteNotifications()

怎么解决这个?



1> Wasim K. Mem..:

swift4中

你可以解决这个问题

DispatchQueue.main.async(execute: {
  UIApplication.shared.registerForRemoteNotifications()
}) 

希望这会有所帮助......


我喜欢`DispatchQueue.main.async(){code}`
@PoojaSrivastava`dispatch_async(dispatch_get_main_queue(),^ {// Do stuff});`
对不起,错字:`DispatchQueue.main.async(执行:UIApplication.shared.registerForRemoteNotifications)`.`execute`需要一个函数/闭包类型`() - > Void`所以`registerForRemoteNotifications`有效

2> R. Mohan..:

对于Objective C,以下代码有效

    dispatch_async(dispatch_get_main_queue(), ^{
        [[UIApplication sharedApplication] registerForRemoteNotifications];
    });



3> badhanganesh..:

TL; DR:
所有UI操作都应该在主线程中完成,以避免出现问题.如果没有这样做,主线程检查器(XCode 9中新引入的调试功能)将在运行时产生问题.因此,将代码包装在主线程块中,如下所示,以避免毛刺和运行时警告.

DispatchQueue.main.async {
    UIApplication.shared.registerForRemoteNotifications()
}

在版本之前的Xcode版本中.9,与主线程相关的警告将以文本方式打印在控制台区域中.无论如何,您可以选择在编辑方案诊断设置中禁用(不推荐的方法)主线程检查器.


说明:

Apple在XCode 9中引入了一个新的调试选项,用于检查运行时UIKit和操纵UI元素的其他API的问题.如果在运行时对UIKit API的UI元素进行了任何更改,没有主线程块,则极有可能导致UI故障和崩溃.在主线程检查器默认情况下启用捕捉这些问题在运行时.您可以在编辑方案窗口中禁用主线程检查器,如下所示,但实际上并不建议这样做:

禁用主线程检查器

如果您有任何较旧的SDK或Frameworks,则在更新到Xcode 9时,您可能会遇到此警告,因为某些UIKit方法调用不会包含在主线程中.将它们更新到最新版本将解决问题(如果开发人员知道并修复它).

引自XCode 9测试版发行说明:

Xcode 9中的新功能 - 主线程检查器.

允许从后台线程检测UI API滥用

检测未在主线程上进行的AppKit,UIKit和WebKit方法调用.

在调试期间自动启用,可以在方案编辑器的"诊断"选项卡中禁用.

主线程检查器适用于Swift和C语言.


@Honey发行说明通常包含所有必要的更改:)
@Honey有些人阅读发行说明和文档;-)
@BadhanGanesh(我没有downvote也没有upvoted)如果这不是你想要的那么重写它...因为它就像有人说我有问题X ...然后你回复你*可以*做Y .... OP正在寻找答案.如果这只是一个解释而不是明确表示它不是答案

4> vadian..:

错误消息非常清楚:调度registerForRemoteNotifications到主线程.

我会使用granted的参数和处理error相应

center.requestAuthorization(options: [.sound, .alert, .badge]) { (granted, error) in
        if granted {
              DispatchQueue.main.async {
                  UIApplication.shared.registerForRemoteNotifications()
              }
        } else {
           print(error!)
           // handle the error
        }
}


推荐阅读
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • 本文介绍了Codeforces Round #321 (Div. 2)比赛中的问题Kefa and Dishes,通过状压和spfa算法解决了这个问题。给定一个有向图,求在不超过m步的情况下,能获得的最大权值和。点不能重复走。文章详细介绍了问题的题意、解题思路和代码实现。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • 第七课主要内容:多进程多线程FIFO,LIFO,优先队列线程局部变量进程与线程的选择线程池异步IO概念及twisted案例股票数据抓取 ... [详细]
author-avatar
Mr何冰_874
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有