web-dev-qa-db-ja.com

Swift:UnsafeMutablePointer.deinitializeは、配列に追加するときに負のカウントで致命的なエラーを発生させます

以下のコードはこのエラーを生成します(exportersに追加):

致命的なエラー:負のカウントでUnsafeMutablePointer.deinitialize

    var exporters = [AVAssetExportSession]()

    let exporter = AVAssetExportSession(asset: mainComposition, presetName: AVAssetExportPresetHighestQuality)!
    exporter.videoComposition = videoComposition
    exporter.outputFileType = AVFileTypeMPEG4
    exporter.outputURL = exportURL
    exporter.shouldOptimizeForNetworkUse = true
    exporters.append(exporter)

UnsafeMutablePointer.deinitializeに関するStackOverflowの他の投稿は、この問題にあまり光を当てていません。これは一貫して発生するわけではありません。

何か案は?

23
Crashalot

同様のエラーが発生しました。この問題は、複数のスレッドが同時に配列を変更したことが原因でした。追加呼び出しをシリアルディスパッチキューにラップすることで解決しました。

    let serialQueue = DispatchQueue(label: "myqueue")

    serialQueue.sync {
        exporters.append(exporter)
    }
34

私はこのタイプの問題を次のように解決しました:

DispatchQueue.global(qos: .background).sync {
        //your code 
    }
0
Nomanur