我在Swift(ios app)中有一个非常大的项目,我需要在不同的线程中的不同位置进行大量修改和访问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()
}
}
}
}
在真实项目中,有两个以上的功能。然后我的主线程中的viewControllers在必要时调用函数。所以基本上这些函数等待对coreData的访问可用,这样他们就可以读取或写入而没有任何问题。这些函数每2分钟左右调用一次,因此在执行之前等待另一个函数不应该是一个问题。这似乎工作得很好,它运行正常,但经过一段时间后,它会崩溃并给我EXC_BAD_ACCESS(代码= 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
然后由每个函数访问。
我已经阅读了很多关于此错误的文章,但是他们都说数据正在尝试访问已删除的内容,所以我不明白这是怎么回事?考虑到只有一个功能正常工作(我已经检查过印刷品,确实只有一个功能被访问)感谢您的帮助