ios - 在 viewWillDisappear 上显示事件指示器

标签 ios swift core-data uiactivityindicatorview

viewWillDisappear 上,我需要更新很多 Core Data 记录,这样做会在我从一个 viewController 移动到另一个(通过 Tab View Controller)时造成延迟.)

在我的 viewWillDisappear 方法中,我调用了 settingsChanged(),如下所示:

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    //other things
    if anySettingChanged {
      settingsChanged()
    }
}

func settingsChanged() {
  // attempt to display activity indicator view
  context.performBlockAndWait { // on private queue
    // update a lot of Core Data records
    // attempt to hide activity indicator view
  }
}

但是,尽管 View 在滞后期间可见,但我无法更新消失的 View 。我只是想以某种方式显示正在发生的事情,而不是延迟 2-3 秒。 但我似乎无法显示事件指示器 View ! (我使用主线程来更新 View !)

使用:

context.performBlock 

解决了滞后问题,但导致错误,因为我的下一个 viewControllers 依赖于 Core Data 完成更新。具体我得到

"Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSCFSet: 0x12824cde0> was mutated while being enumerated.'"

最佳答案

你在这里做什么是为了覆盖 viewWillDisappear 方法,所以你过早地调用了 super 引用,试试这个:

override func viewWillDisappear(animated: Bool) {
    //other things
    if anySettingChanged {
      settingsChanged()
    }
    super.viewWillDisappear(animated)
}

关于ios - 在 viewWillDisappear 上显示事件指示器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37678541/

相关文章:

php - webservice接收参数数组作为字符串而不是数组

iphone - 哪种调整 UIImage 大小的方法更好,为什么?

ios - Swift:在初始化之前使用的变量

ios - 如何保存结构体的顺序?

ios - UIBezierPath 平移变换给出了错误的答案

ios - 导航栏的标题隐藏在后面的标题后面

ios - 使用 map() 从字典数组(即 JSON 数组)初始化数组内联

objective-c - API 的 CoreData 模型对象

core-data - Mantle 和 Core Data - 更新而不是删除/创建

ios - 从后台恢复后访问核心数据 NSManagedObject 会使应用程序崩溃