在Core Data和EXC_BAD_ACCESS信号中插入实体

时间:2011-08-09 14:26:14

标签: ios multithreading core-data

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

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

因此我认为错误是因为此代码实际上并未在主线程上运行。这可能是原因吗?哪种解决方法最好?

1 个答案:

答案 0 :(得分:0)

在给定的代码行中唯一可能的EXC_BAD_ACCESS源是mObjContext具有nil值。您在沿线的某处丢失了NSManagedObjectContext对象。

基于这一行代码,您可能没有正确使用评估者。托管对象上下文几乎总是包含插入代码的对象的属性,因此该行应该看起来像:

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

...确保正确访问上下文对象。同样,当您设置属性值时,它应该是:

self.mObjContext=someManagedObjectContext;