Создаю context со своим NSPersistentStoreCoordinator и устанавливаю тип параллелизма:
let context = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
context.persistentStoreCoordinator = psc
Далее создаю дочерний контекст, в котором хочу создавать и сохранять сущности, но при создании возникает ошибка
Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
Создание дочернего контекста при вызове функции saveWithBlockAndWait:
extension NSManagedObjectContext {
private var localQueue: DispatchQueue {
let queue = DispatchQueue(label: "localQueue", qos: .background, attributes: .concurrent, autoreleaseFrequency: .inherit, target: nil)
return queue
}
func saveWithBlockAndWait(mainContext: NSManagedObjectContext, completion: (_ localContext: NSManagedObjectContext) -> ()) {
let childContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
childContext.parent = mainContext
localQueue.sync {
completion(childContext)
do {
try childContext.save()
} catch let error as NSError {
print("Could not save. \(error), \(error.userInfo)")
}
}
}
}
здесь при вызове функции
func create<EntityType>(type: EntityType.Type, updateData: ((EntityType) -> ()), completion: @escaping((EntityType) -> ())) throws where EntityType: NSManagedObject {
let entityName = String(describing: type)
context.saveWithBlockAndWait(mainContext: context) { (childContext) in
let entity = NSEntityDescription.insertNewObject(forEntityName: entityName, into: childContext) as! EntityType
updateData(entity)
}
}
Здесь при вызове создаю в дочернем контексте и в кастомной очереди сущность, но в строке let entity = NSEn… возникает ошибка.
Я не понимаю где нарушена логика параллелизма потоков. Есть контекст, с mainQueueConcurrencyType. Есть его дочерний контекст, в нем выполняю операции при помощи кастомной очереди.
бьюсь над этой ошибкой уже очень долго, буду благодарна любой подсказке по параллелизму/асинхронности/очередям