コアデータの並行性の問題のデバッグに問題があります。私の方式ではコアデータプライベートコンテキストperformAndWaitにより、デバッグがクラッシュする
は私が有効になって:
-com.apple.CoreData.Logging.stderr 1
-com.apple.CoreData.ConcurrencyDebug 1
私は、バックグラウンドスレッドでコアデータからレコードをフェッチしたいと思います。
私のUIViewController
では、DispatchQueue.global(qos: .background).async
を作成します。ここでは、Core Dataを呼び出してレコードを取得します。
私は、親/子を使用しています:
func performStationsFetch(filter: String = "") -> [Stations] {
let privateMOC = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
let parentMOC = (UIApplication.shared.delegate as! AppDelegate).managedObjectContext
privateMOC.parent = parentMOC
var fetchResults: [Stations] = []
privateMOC.performAndWait {
let fetchRequest: NSFetchRequest<Stations> = Stations.fetchRequest()
fetchRequest.predicate = NSPredicate(format: "name contains[c] %@", filter)
do {
fetchResults = try privateMOC.fetch(fetchRequest)
} catch {
print("Fetch error")
}
}
return fetchResults
}
問題は、私はprivateMOC.perform
を呼び出す場合、コードは正常に動作しています。
しかし、私は、コードがクラッシュprivateMOC.performAndWait
を呼び出し、私に+[NSManagedObjectContext __Multithreading_Violation_AllThatIsLeftToUsIsHonor__]
を与えた場合、誰が問題になることができるかの提案を持っていますか?
答えを更新したので、コード全体が表示されるようになりました。あなたが提供したリンクを勉強します。 – Matic1911
ご協力いただきありがとうございます。私はあなたの努力に感謝します。 – Matic1911