首页 > 解决方案 > EXC_BAD_ACCESS(代码=1 在 NSManagedObject(实体:

问题描述

我在 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 个。然后我在主线程中的视图控制器在必要时调用这些函数。因此,基本上这些函数等待对 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 个功能在工作(我已经检查了打印以确保确实只有一个功能被访问)谢谢您的帮助

标签: iosswiftcore-datansmanagedobject

解决方案


推荐阅读