0
CoreData 동시성 문제가 있습니다. 대상 스레드가 DispatchGroup
으로 차단되는 동안 context.perform
을 수행 할 수 없습니다.Swift : DispatchGroup을 사용한 교착 상태
func upload(objects: [NSManagedObject]) {
let group = DispatchGroup()
for object in objects {
group.enter()
upload(object) {
group.leave()
}
}
group.wait() // current thread is blocked here
someAdditionalWorkToDoInSameThread()
}
func upload(object: NSManagedObject, completion:()->()) {
let context = object.managedObjectContext
performAlamofireRequest(object) {
context.perform {
// can't reach here because the thread is blocked
update(object)
completion()
}
}
}
, 제대로이 문제를 다시 구현할 제발 도와주세요 :
다음은 문제를 보여주는 간단한 예입니다. 감사.
이렇게 원래의 'update' 함수는 명확한 동기 함수에서 불필요한 * 완료 블록 *을 사용하고있었습니다. 나에게 많은 의미가되지 않는다 ... –
나는 내 첫 번째 기능을 업데이트했다. –
@ AndriyTrubchanin : 알림을 사용하여 문제가 해결되지 않았습니까? –