iOS中具有托管对象的线程中存在错误的访问错误

iOS中具有托管对象的线程中存在错误的访问错误,ios,objective-c,core-data,ios7,nsmanagedobject,Ios,Objective C,Core Data,Ios7,Nsmanagedobject,我有一行代码是Sqlite DB中的一个表: Users *users = [[Users alloc] init]; ... do some processing in a thread and other stuff } //end function 但是我注释掉了除Users*Users行之外的所有内容,并在函数调用结束时发现我的错误与该行有关。错误是: "Thread X: EXC_BAD_ACCESS (code=1, address=xxxxx) 为什么会发生这种情况?任何托

我有一行代码是Sqlite DB中的一个表:

Users *users = [[Users alloc] init];

... do some processing in a thread and other stuff

} //end function
但是我注释掉了除Users*Users行之外的所有内容,并在函数调用结束时发现我的错误与该行有关。错误是:

"Thread X: EXC_BAD_ACCESS (code=1, address=xxxxx)

为什么会发生这种情况?

任何托管对象都属于ManagedObjectContext。任何ManagedObjectContext和属于它的所有托管对象只能在一个线程中使用。否则,您将遇到各种各样的麻烦,包括崩溃

不能使用
init
创建
NSManagedObject
实例。
NSManagedObject
NSManagedObjectContext
关联,必须使用:
initWithEntity:insertIntoManagedObjectContext:
创建


*users
NSManagedObject
的一个实例吗?是的,这是错误的做法还是错误的?我有一个users.h/.m文件,它是通过子类化自动生成的,是一个表名“表名”是什么意思?你不是在使用核心数据吗?是的,在模型的设计视图中,它被称为用户,并且具有属性和关系。SOP说他们注释掉了除
Users*Users
行之外的所有内容。真正的原因是我有一个名为Users+authenization的类别,它有一个-(void)saveAllMyUsers。。。但是如果我不能创建一个实例,我怎么称呼它呢?你可以创建一个实例,只是不能直接创建。如果您想这样做,那么就不应该使用核心数据。核心数据不仅仅是sqlite的接口,而是一个对象图管理器和持久性框架。我建议您在前进之前退一步,了解核心数据是如何工作的。我想要该实例的唯一原因是调用我的类别函数,它是-(void),而不是类函数+(Users),这也是一种糟糕的做法。
NSManagedObjectContext
是处理将更改保存到数据存储的类。看,但我将上下文和所有细节传递到类别中,以对其进行抽象。我只是想知道怎么称呼它?在视图控制器中,我应该将保存代码放在哪里?