iOS App에서 매우 이상한 충돌이 발생했습니다. 아래 함수는 일부 프로토콜의 구현이므로 일부 성공/실패 콜백을 사용하도록 선언을 변경할 수 없습니다. 그것은 입력 매개 변수를 가지고 있으며 출력에서 AVAsset을 기대합니다. 내 문제는 자산을 쓰는 중입니다. 디스패치 그룹 (dg 변수)을 떠나는 동안 이상한 충돌이 발생합니다. 나는 충돌의 줄을 주석으로 표시했다. 이 충돌은 항상 발생하는 것은 아닙니다. 그냥 때때로. 이 함수는 다음과 같습니다.Dispatch Group의 이상한 행동
func writeAsset(to url: URL, metadataArray: [AVTimedMetadataGroup]) -> AVAsset {
let writer = try! AVAssetWriter(url: url, fileType: AVFileTypeQuickTimeMovie)
writer.movieTimeScale = track.timeScale
// setup writer, inputs and metadata adaptor and so on ...
if writer.startWriting() {
writer.startSession(atSourceTime: kCMTimeZero)
}
let writeQueue = DispatchQueue(label: "HH.Write.Track.Queue")
let dg = DispatchGroup()
var i = 0
dg.enter() // Entering to the group
writerMetadataIn.requestMediaDataWhenReady(on: writeQueue) {
while writerMetadataIn.isReadyForMoreMediaData {
//let group = ..fetch next group to write
if i < metadataArray.count {
let group = metadataArray[i]
if writerMetadataAdaptor.append(group) {
}
i += 1
} else {
writerMetadataIn.markAsFinished()
writer.finishWriting {
dg.leave() // CRASH IN THIS LINE
}
break
}
}
}
dg.wait()
let writtenAsset = AVAsset(url: url)
return writtenAsset
}
누군가이 충돌의 원인을 알 수 있습니까? xCode의 충돌 보고서에서이 정보 만 있습니다.
크래시 세부 정보가 무엇입니까 ?? –
나는 그것을 가지고 있지 않다. 바로이 라인. –
터미널에는이 정보 만 있습니다. (lldb) –