我需要使用 NSManagedObjectContext 上的属性作为在后台运行的方法中的参数。调用此方法后,即使我所做的只是获取属性值,但从那时起,我就会在该上下文中遇到问题。
最佳答案
来自docs :
Any time you manipulate or access managed objects, you use the associated managed object context. Core Data does not present a situation where reads are “safe” but changes are “dangerous”—every operation is “dangerous” because every operation has cache coherency effects and can trigger faulting.
我在多线程应用程序中使用 Core Data 一段时间了(也在 iOS 5 之前的时代,没有父上下文等)。我怀疑它在幕后做了一些线程巫毒(锁之类的东西)。如果您想要 100% 安全,则在后台线程中,如果尚未在同一线程上创建 NSManagedObjectContext
,则无法调用 NSManagedObject
上的任何方法。否则,可能会发生未定义的行为(例如,我遇到了一些死锁)。
关于objective-c - 从后台线程访问 NSManagedObject 上的属性是否会使上下文跨该线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25067838/