【问题标题】:Swift - Core Data. Collection was mutated while being enumerated斯威夫特 - 核心数据。枚举时集合发生了突变
【发布时间】:2017-06-28 16:48:55
【问题描述】:

我确实看过所有关于标题的答案,但它们都是用 Objetive-C 编写的,你知道 Swift 中的那个吗??

这是我的代码:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    let respuesta = self.funcCoreData.obtenerResultados(entidad: "Clientes", orden: "nombre_comercial", ascendente: true)
    self.objeto = respuesta[0] as! NSFetchRequest<NSManagedObject>
    self.resultados = respuesta[1] as! NSFetchedResultsController<NSManagedObject>
    do {
        try self.resultados.performFetch()
        if self.funcCoreData.objetoLleno(objeto: self.objeto) {
            self.pintarSecciones()
        }
    } catch {
        print("???????????????? \(error)")
    }
}

文件 funcCoreData.swift

func obtenerResultados(entidad: String, orden: String, ascendente: Bool) -> [AnyObject] {
    let appDelegate = UIApplication.shared.delegate as? AppDelegate
    let context = appDelegate?.persistentContainer.viewContext
    let objeto = recorrerObjeto(entidad: entidad, orden: orden, ascendente: ascendente)
    let recorrerResultados = NSFetchedResultsController<NSManagedObject>(fetchRequest: objeto, managedObjectContext: context!, sectionNameKeyPath: "seccionLetra", cacheName: nil)

    var array = [AnyObject]()
    array.append(objeto)
    array.append(recorrerResultados)

    return array
}

func recorrerObjeto(entidad: String, orden: String, ascendente: Bool) -> NSFetchRequest<NSManagedObject> {
    let objeto = NSFetchRequest<NSManagedObject>(entityName: entidad)
    let ordenacion = NSSortDescriptor(key: orden, ascending: ascendente, selector: #selector(NSString.caseInsensitiveCompare))
    objeto.sortDescriptors = [ordenacion]
    return objeto
}

我得发个帖子,比如DispatchQueue.global(qos: .background).async 但是,我不知道在哪里!

【问题讨论】:

  • 不,它没有... >.
  • 嘿,我在一家公司工作,所以我不应该分享我所有的代码,但是我明天会编辑这篇文章,你可能会看到我的问题。谢谢!
  • 什么?但你会帮忙还是不帮忙? @SwiftDeveloper xd

标签: swift multithreading core-data


【解决方案1】:

您不需要包含 fetchRequest 和 fetchedResultsController 的数组。这使代码不必要地复杂。您可以从 fetchedResultsController fetchedObjects 属性中获取对象,如果您需要 fetchRequest,您可以从 fetchedResultsController.fetchRequest 中获取。

我不知道 self.funcCoreData.objetoLleno 或 self.pintarSecciones 在做什么,但我怀疑这是不必要的并导致崩溃。如果您有通过 fetchedResultsController.fetchedObjects 枚举的代码,那么您必须在执行此操作之前复制对象。 fetchedObjects 在您循环时可能会发生变化并导致崩溃。

【讨论】:

    猜你喜欢
    • 2015-05-23
    • 1970-01-01
    • 2012-07-30
    • 2015-11-13
    • 1970-01-01
    • 2011-03-17
    • 2022-01-23
    • 2016-11-20
    • 2021-05-19
    相关资源
    最近更新 更多