У меня есть очень большой проект в Swift (приложение ios), где мне нужно сделать много изменений и получить доступ к coreData в разных местах в разных потоках.Сначала я столкнулся с большой проблемой доступа к данным, в то время как другой поток менял их, поэтому я реструктурировал свой проект следующим образом:
class dataManager {
var bool : isAvailable
func func1 ()
{
DispatchQueue.global(qos: .default).async {
if(isAvailable)
{
self.isAvailable = false
doStuff1
self.isAvailable = true
}
else
{
sleep(1)
func1()
}
}
}
func func2 ()
{
DispatchQueue.global(qos: .default).async {
if(isAvailable)
{
self.isAvailable = false
doStuff2
self.isAvailable = true
}
else
{
sleep(1)
func2()
}
}
}
}
В реальном проекте гораздо больше, чем 2 функции.И тогда мои viewControllers в основном потоке вызывают функции, когда это необходимо.Таким образом, в основном функции ждут доступа к coreData, чтобы они могли читать или писать без проблем.Функции вызываются каждые 2 минуты или около того, поэтому не должно возникнуть проблем с ожиданием выполнения другой перед выполнением.Кажется, это работает довольно хорошо, он работает нормально, но через некоторое время он вылетит и выдаст мне EXC_BAD_ACCESS (code = 1. Сбой в этой строке:
let entity = NSEntityDescription.entity(forEntityName: self.namesEntry[i], in: managedContext)!
let event = NSManagedObject(entity: entity, insertInto: managedContext) //crashes here
Переменная managedContext создается один раз всоздание класса:
managedContext = appDelegate.persistentContainer.viewContext
и затем доступ к каждой функции.
Я прочитал много статей об этой ошибке, но все они говорят, что данные пытаются получить доступ к чему-токоторые были удалены, поэтому я не понимаю, как это возможно? учитывая, что работает только 1 функция (я проверил с отпечатками, чтобы убедиться, и действительно только одна функция доступна) Спасибо за вашу помощь