ios - 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 个功能在工作(我已经检查了打印以确保确实只有一个功能被访问)谢谢您的帮助
解决方案
推荐阅读
- init - 如何摆脱我的 Linux 机器上发生的分布式拒绝服务或挖矿
- google-maps - 在 Flutter 中保存谷歌地图状态
- react-native - 将自定义字体加载到 Android 上的 React Native Webview
- c# - 使用 URI 而不是 IP 来访问 SOAP Web 服务
- optimization - 具有优化方法的组分配问题
- reactjs - 通过构造函数反应绑定 - 可以自动化吗?
- marklogic - Rest API 管理 - curl 命令从终端设置 Marklogic 服务器中的主机时出错
- mysql - MySQL Workbench 语法无效
- python - 曲线末端的标签 (matplotlib-seaborn)
- function - 如何解决我在 C 编程中使用浮点数时遇到的问题?