Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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 在CoreData和EXC_BAD_访问信号中插入实体_Ios_Multithreading_Core Data - Fatal编程技术网

Ios 在CoreData和EXC_BAD_访问信号中插入实体

Ios 在CoreData和EXC_BAD_访问信号中插入实体,ios,multithreading,core-data,Ios,Multithreading,Core Data,我正在编写一个与服务器同步的程序。同步在前台运行,但使用LRResty和委托获取响应。随机地,当我运行同步时,我得到运行此代码的EXC_BAD_访问信号,或者在CoreData中添加一些其他插入/关系: WorkoutExerciseSet *set = [NSEntityDescription insertNewObjectForEntityForName:@"WorkoutExerciseSet" inManagedObjectContext:mObjContext]; 因此,我认为给出错

我正在编写一个与服务器同步的程序。同步在前台运行,但使用LRResty和委托获取响应。随机地,当我运行同步时,我得到运行此代码的EXC_BAD_访问信号,或者在CoreData中添加一些其他插入/关系:

WorkoutExerciseSet *set = [NSEntityDescription insertNewObjectForEntityForName:@"WorkoutExerciseSet" inManagedObjectContext:mObjContext];

因此,我认为给出错误是因为该代码实际上没有在主线程上运行。这可能是原因吗?解决这个问题的最佳方法是什么?

在给定的代码行中,EXC\u BAD\u访问的唯一可能来源是mObjContext有一个nil值。您正在丢失NSManagedObjectContext对象

基于这一行代码,您可能没有正确使用评估员。托管对象上下文几乎始终是包含插入代码的对象的属性,因此该行可能如下所示:

WorkoutExerciseSet *set = [NSEntityDescription insertNewObjectForEntityForName:@"WorkoutExerciseSet" inManagedObjectContext:self.mObjContext];
。。。以确保正确访问上下文对象。同样,在设置属性值时,属性值应为:

self.mObjContext=someManagedObjectContext;

EXC_BAD_访问通常来自向解除分配的对象发送消息。您没有发布足够的代码来确定问题的产生位置。WorkoutExerciseSet是实体还是关系?NSEntityDescription将返回一个NSEntity实例,因此您需要引用实体名称,而不是关系。获取对实体的引用,然后通过访问相关关系获取集合。i、 e.N实体*person=[…..然后使用NSSet*训练=[person valueForKey:@workoutExerciseSet]抓取训练这些都是好的方面,谢谢,看起来问题是从不同的线程访问同一个ManagedObjectContext,所以这可能是EXC_BAD_访问的原因。我解决了这个问题,在ManagedObjectContext上加了一个锁,这样即使从不同的线程访问,它也会被顺序访问。在多个线程上使用上下文是不好的做法一个线程。如果你有多个线程,你应该为每个线程创建一个单独的上下文。