Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS:来自iOS14 EXC_BAD_访问线程队列的随机错误消息:NSManagedObjectContext NSInternalAdditions ForgeToObject PropagateToObject Store_Ios_Objective C_Swift_Uitableview_Nsmanagedobjectcontext - Fatal编程技术网

iOS:来自iOS14 EXC_BAD_访问线程队列的随机错误消息:NSManagedObjectContext NSInternalAdditions ForgeToObject PropagateToObject Store

iOS:来自iOS14 EXC_BAD_访问线程队列的随机错误消息:NSManagedObjectContext NSInternalAdditions ForgeToObject PropagateToObject Store,ios,objective-c,swift,uitableview,nsmanagedobjectcontext,Ios,Objective C,Swift,Uitableview,Nsmanagedobjectcontext,自从新安装的iOS 14.0以来,我有一个奇怪的bug,当我点击一个tableview时,或者当我点击一个按钮时,或者当我打开一个弹出窗口时,就会触发这个bug。它是非常随机的,很难完美地复制。xcode的控制台对这个问题不是很健谈。我在线程中有以下错误消息: //错误示例1 #4 0x0000000189c378e8 in-[NSManagedObjectContext(\u NSInternalAdditions)\u ForgeToObject:传播对象存储:removeFromRegis

自从新安装的iOS 14.0以来,我有一个奇怪的bug,当我点击一个tableview时,或者当我点击一个按钮时,或者当我打开一个弹出窗口时,就会触发这个bug。它是非常随机的,很难完美地复制。xcode的控制台对这个问题不是很健谈。我在线程中有以下错误消息:

//错误示例1

#4 0x0000000189c378e8 in-[NSManagedObjectContext(\u NSInternalAdditions)\u ForgeToObject:传播对象存储:removeFromRegistry:()

主要观点是:

线程12:EXC\u错误访问(代码=1,地址=0x4)

//错误示例2

//错误示例3

它说NSManagedObjectContext的线程导致了崩溃。
我很难得到更多关于这个错误的信息


有什么想法吗?

错误表明CoreData操作在它应该执行的另一个线程上执行

根据,您可以使用
perform()
(异步)或
performAndWait()
(同步)来确保在正确的队列中执行调用

您可以使用中基于队列的并发类型来使用上下文 与perform(:)和performAndWait(:)结合使用。你们组 要发送到要传递到的块内上下文的“标准”消息 这些方法之一。有两个例外:

上的Setter方法 基于队列的托管对象上下文是线程安全的。您可以调用 这些方法直接用于任何线程

如果您的代码正在 在主线程中,可以在主队列样式上下文中调用方法 直接而不是使用基于块的API

执行(:)和执行等待(:)确保在 为上下文指定的队列。perform(:)方法返回 立即,上下文自行执行块方法 线使用performAndWait(:)方法,上下文仍会执行 块方法在它自己的线程上,但该方法不返回 直到执行块为止


当您初始化上下文时,它将附加到某个队列,您不知道是哪个队列,但通过调用该方法(perform或PerformdWait),您将确保在正确的队列中执行该操作。

您是否希望在主线程中操作CoreData操作,而在另一个队列(线程12)中执行了某些操作?@Larme我正在CoreData中写入一个值,它正在TableView中显示它。或者我想显示一个弹出窗口,它是初始化CoreData中的值。这是两个示例您应该编写
yourManagedContext.perform{}
(或
performAndWait()
)以确保在正确的线程中调用它。我想这就是问题所在,这就是问题所在。我使用了managedObjectContext=[[NSManagedObjectContext alloc]initWithConcurrencyType:NSPrivateQueueConcurrencyType],应该改用NSMainQueueConcurrencyType。谢谢你,你为我节省了很多时间。您可以把它放在答案中,我将验证它(通过添加代码)。