我真的看到了关于标题的所有答案,但所有这些都是用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
,但是,我不知道在哪里!
答案 0 :(得分:0)
您不需要包含fetchRequest和fetchedResultsController的数组。这使得代码不必要地复杂化。您可以获取从fetchedResultsController fetchedObjects属性获取的对象,如果需要fetchRequest,可以从fetchedResultsController.fetchRequest获取它。
我不知道self.funcCoreData.objetoLleno或self.pintarSecciones正在做什么,但我怀疑这是不必要的并导致崩溃。如果您有通过fetchedResultsController.fetchedObjects枚举的代码,那么您必须在执行此操作之前复制对象。
可以在循环播放时更改fetchedObjects。