如何解决iOS:来自iOS14 EXC_BAD_ACCESS线程队列的随机错误消息:NSManagedObjectContext NSInternalAdditions
自从新安装iOS 14.0起,我有一个奇怪的错误,它是在单击表视图时,单击按钮或打开弹出窗口时触发的。它是非常随机的,并且很难完美再现。 xcode的控制台对此问题不是很健谈。我在线程中有此错误消息:
//错误示例1
-[NSManagedobjectContext(_NSInternalAdditions)_forgetobject:propagatetoObjectStore:removeFromregistry:]()中的#4 0x0000000189c378e8
这在主视图中:
线程12:EXC_BAD_ACCESS(代码= 1,地址= 0x4)
//错误示例2
//错误示例3
它表示NSManagedobjectContext的线程导致崩溃。
我在获取有关该错误的更多信息方面遇到问题...
有什么想法吗?
解决方法
该错误表明有一个CoreData操作在与它应该执行的线程不同的另一线程上完成。
根据doc,您可以使用perform()
(异步)或performAndWait()
(同步)来确保您在正确的队列中进行呼叫。
您使用上下文中的基于队列的并发类型来使用上下文 与perform( :)和performAndWait( :)结合使用。你组 要发送到块中上下文的“标准”消息,然后传递给 这些方法之一。有两个例外:
设置方法 基于队列的管理对象上下文是线程安全的。您可以调用 这些方法直接在任何线程上。
如果您的代码正在 主线程,您可以在主队列样式上下文上调用方法 直接代替使用基于块的API。
perform( :)和performAndWait( :)确保在 为上下文指定的队列。 perform( :)方法返回 立即执行,并且上下文自行执行块方法 线。使用performAndWait( :)方法,上下文仍将执行 块方法在其自己的线程上,但该方法不会返回 直到执行该块。
初始化上下文时,它将附加到某个队列,您将不知道是哪个队列,但是通过调用该方法(perform或performAndWait),您一定会在正确的队列中进行操作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。