我的应用程序中有两个线程在运行。
主线程中的
但是,在更新/处理[managedObjectContext executeFetchRequest:request error:&error]核心数据的过程中,也有一些时候
…我得到:
#0 0x34507c5c in semaphore_wait_signal_trap ()
#1 0x34507f58 in semaphore_wait_signal ()
#2 0x364d573a in pthread_mutex_lock ()
#3 0x35c91a2e in -[_PFLock lock] ()
#4 0x35c91a12 in -[NSPersistentStoreCoordinator lock] ()
#5 0x35c919e8 in -[NSManagedObjectContext(_NSInternalAdditions) lockObjectStore] ()
#6 0x35c90676 in -[NSManagedObjectContext executeFetchRequest:error:] ()NSManagedObjectContext是如何被锁定的?我能为这个做些什么?
发布于 2011-10-29 16:02:04
锁是正常操作的一部分,不是问题的根源。
很可能,您在管理独立线程上的上下文时遇到了问题。确保对每个线程使用不同的上下文,并确保在线程之间不传递托管对象。在尝试从另一个线程访问对一个线程所做的更改之前,请确保合并了上下文。
发布于 2011-10-29 10:33:28
掌握多线程应用程序中的CoreData可能很困难。确保为每个使用NSManagedObjectContext的线程创建了一个新的CoreData。必须在使用MOC的线程中创建MOC。MOC本身并不是线程安全。CoreData不为您锁定它。如果对每个线程使用新的MOC,则不必执行锁定操作。在您的堆栈跟踪中,可以看到NSPersistentStoreCoordinator是被锁定的(而不是MOC)。CoreData是这样做的,因此只有一个MOC可以同时访问NSPersistentStoreCoordinator。
https://stackoverflow.com/questions/7938136
复制相似问题