gpt4 book ai didi

multithreading - 敲击按钮后应用程序崩溃

转载 作者:行者123 更新时间:2023-11-30 14:19:32 24 4
gpt4 key购买 nike

在我的应用程序中,用户必须按下按钮来生成数据,该数据在专用线程中创建和处理,然后通过核心数据存储。该按钮在按下后立即被禁用,只有在通过 Core Data 保存数据后才再次启用。

但是,如果我快速重复单击该按钮,它会正常工作一段时间,但不久之后,应用程序要么因 EXC_BAD_ACCESS (code=1, address=0x0) 崩溃,要么收到警告:无法保存核心数据,所以我想知道什么可能导致这些问题?

结构概要如下(伪代码):

  1. 用户点击按钮
  2. notificationCenter.addObserver("didFinishGenerationOperation")
  3. NSOperationQueue.addOperation(dataGenerationOperation)
  4. dataGenerationOperation.completionBlock {
    dispatch_async(dispatch_get_main_queue() {
    notificationCenter.postNotificationName("didFinishGenerationOperation")
    }
    }
  5. 调用 didFinishNameGenerationOperation() 执行以下操作:
    1. processingQueue.waitUntilAllOperationsAreFinished()
    2. 清晰的核心数据管理阵列 Controller 。
    3. 将所有新生成的对象添加到数组 Controller 。
    4. notificationCenter.addObserver("didSaveNotification")
    5. coreData.saveData()
  6. 保存完成后,调用 didSaveNotification() 广播通知,以便可以再次启用 GUI:
    1. notificationCenter.postNotificationName("GenerationComplete")
  7. View 类收到通知并再次启用按钮。

这基本上就是点击按钮后的操作流程。通知观察者在不再需要后会立即在任何地方再次被删除,但我没有在上面包含它。我不明白有什么问题。乍一看,代码似乎是证据,但显然某个地方出了问题。核心数据在调度 NSManagedObjectContextDidSaveNotification 后不应该完成保存吗?同样,整个生成代码在其自己的线程上执行。

这个应用程序是为了在应用程序商店上发布的,所以我不想在其中留下这样的错误。有人知道可能导致崩溃的原因吗?

最佳答案

对于它的值(value)...

我设法解决了这个问题。由于我的代码很复杂,所以我没有看到用于清除阵列 Controller 以生成数据的命令会干扰添加新数据的部分。与此存在一些差异。所以现在我重组并优化了与数据生成和并发操作相关的整个代码,无论我现在敲击按钮的速度有多快,我都无法再重现该错误。现在,在将新数据添加到 AC 之前,AC 会被清除一次。

关于multithreading - 敲击按钮后应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30662537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com