核心数据:解决奇怪的EXC_BAD_ACCESS错误

如何解决核心数据:解决奇怪的EXC_BAD_ACCESS错误

|| 我面临核心数据一个非常奇怪的问题。让我们对其进行描述: 定义 假设我有两个模型,分别是
ModelA
ModelB
。在数据模型中,“ 0”将“ 1”作为一对多关联进行引用,因此,“ 1”与“ 0”具有一对一关联。 更新资料 当应用程序启动时(尤其是在第一次启动时),或者当用户询问时,我必须为每个“ 0”实例创建或更新所有“ 1”实例。预定“ 0”个实例。对于每个“ 0”实例,我大约有200个“ 1”实例。 我使用这样的代码:
ModelB *model = [NSEntityDescription insertNewObjectForEntityForName:@\"ModelB\"
                                              inManagedObjectContext:context];
model.value = [NSNumber numberWithDouble:myValue];
model.modelA = modelA; // I pass modelA as a parameter to the function
[modelA addModelBObject:model];
我不会立即持久存储数据(因为我有很多数据要保存),但是我会在过程结束时这样做。 错误 有时,并且仅在有时,我在此行出现
EXC_BAD_ACCESS
错误:
model.value = [NSNumber numberWithDouble:myValue];
启用僵尸,我只能看到那个愚蠢的
EXC_BAD_ACCESS
,没有更多信息。 真正奇怪的错误 我试图以不同的方式设置该值,但没有任何改变。然后,我尝试将ѭ16
retain
,但是什么都没有改变。然后,最后,我尝试将模型一次创建后
retain
,然后得到通常的
EXC_BAD_ACCESS
,但是对应于模型的创建,也就是说:
ModelB *model = [[NSEntityDescription insertNewObjectForEntityForName:@\"ModelB\"
                                               inManagedObjectContext:context] retain];
有想法吗? 您对如何解决此问题有任何想法吗?难道我做错了什么? 顺便说一句,如果我放慢速度(例如,每次创建新模型时都保存上下文),显然不会发生此问题,但这确实减慢了整个应用程序的速度。 编辑 在极少数情况下,我会得到以下堆栈跟踪:
Serious application error.  Exception was caught during Core Data change processing.  This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification.  -[__NSCFSet addObject:]: attempt to insert nil with userInfo (null)
2011-06-15 11:36:59.864 myApp[457:607] *** Terminating app due to uncaught exception \'NSInvalidArgumentException\',reason: \'-[__NSCFSet addObject:]: attempt to insert nil\'
*** Call stack at first throw:
(
0   CoreFoundation                      0x313dc64f __exceptionPreprocess + 114
1   libobjc.A.dylib                     0x34b3dc5d objc_exception_throw + 24
2   CoreFoundation                      0x313dc491 +[NSException raise:format:arguments:] + 68
3   CoreFoundation                      0x313dc4cb +[NSException raise:format:] + 34
4   CoreFoundation                      0x31351089 -[__NSCFSet addObject:] + 152
5   CoreData                            0x35136dd9 -[NSManagedObjectContext(_NSInternalChangeProcessing) _processPendingUpdates:] + 524
6   CoreData                            0x350f4b3d -[NSManagedObjectContext(_NSInternalChangeProcessing) _processRecentChanges:] + 724
7   CoreData                            0x351363a5 -[NSManagedObjectContext processPendingChanges] + 16
8   CoreData                            0x350d027f _performRunLoopAction + 126
9   CoreFoundation                      0x313b3a35 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 16
10  CoreFoundation                      0x313b5465 __CFRunLoopDoObservers + 412
11  CoreFoundation                      0x313b675b __CFRunLoopRun + 854
12  CoreFoundation                      0x31346ec3 CFRunLoopRunSpecific + 230
13  CoreFoundation                      0x31346dcb CFRunLoopRunInMode + 58
14  GraphicsServices                    0x3658841f GSEventRunModal + 114
15  GraphicsServices                    0x365884cb GSEventRun + 62
16  UIKit                               0x368ded69 -[UIApplication _run] + 404
17  UIKit                               0x368dc807 UIApplicationMain + 670
18  myApp                               0x000028cf main + 82
19  myApp                               0x00002878 start + 40
)
terminate called after throwing an instance of \'NSException\'
编辑2 这是异常的堆栈跟踪:
#0  0x313f1460 in __CFBasicHashAddValue ()
#1  0x3133fff8 in CFBasicHashAddValue ()
#2  0x31344162 in CFSetAddValue ()
#3  0x31351012 in -[__NSCFSet addObject:] ()
#4  0x3514211a in _PFFastMOCObjectWillChange ()
#5  0x3512ed46 in _PF_ManagedObject_WillChangeValueForKeyIndex ()
#6  0x35132e7e in _sharedIMPL_setvfk_core ()
#7  0x3513316a in _svfk_2 ()
#8  0x0003b750 in -[_TassoStorico setValoreValue:] (self=0x6d97bf0,_cmd=0x49064,value_=1.02600002) at _TassoStorico.m:87
#9  0x0001b62e in -[EuriborParser(hidden) readStoricoForzato] (self=0x74200d0,_cmd=0x48ff7) at EuriborParser.m:236
#10 0x31349f02 in -[NSObject(NSObject) performSelector:withObject:] ()
#11 0x000441c4 in -[MBProgressHUD launchExecution] (self=0x90a6ff0,_cmd=0x4b83f) at MBProgressHUD.m:482
#12 0x352b3388 in -[NSThread main] ()
#13 0x353255cc in __NSThread__main__ ()
#14 0x34e20310 in _pthread_start ()
#15 0x34e21bbc in thread_start ()
    

解决方法

        CoreData不是线程安全的;看来这是您的问题,请尝试查看此问题     ,        我遇到了类似的问题([managedContext save]上的EA_BAD_ACCESS),该问题是由KeyValueObserver引起的,应该在应删除时将其删除。很难追踪。这意味着即使使用ARC,我也遇到这种情况。     ,        持久存储迁移后重置受管对象上下文 我有类似的问题。我还使用几个线程,并且使用Core Data的
migratePersistentStore:toURL:options:withType:error:
函数。 就我而言,该错误是在另一个线程中迁移之后立即发生的。我以为我的问题与线程有关,所以我开始在代码中加倍考虑线程安全性,但实际上,在对托管对象上下文中的对象进行任何后续操作之前,一次调用ѭ23即可解决所有问题。 核心数据行为 奇怪的是,“ 24”总是给我回引用一个不存在的对象,因此我正在访问不存在的对象并接收“ 12”。重置上下文后,该函数将显示正确的行为。     ,        这两行是多余的,并且可能很危险:
model.modelA = modelA; // I pass modelA as a parameter to the function
[modelA addModelBObject:model];
受管对象上下文将自动为您发送对等关系,因此无需手动进行。实际上,我认为这可能会导致危险的循环。您可以只使用一条线,也可以使用另一条线,并且关系的两侧都将自动设置。我建议:
model.modelA = modelA;
...因为它更简单。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-