Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

350
Vistas
SwiftUI + CoreData: inserta más de 1000 entidades con relaciones

Tengo un proyecto SwiftUI en el que estoy usando CoreData para guardar datos obtenidos de una API en el dispositivo. Estaba tratando de insertar las entidades en lotes que funcionaron bien hasta que me di cuenta de que las relaciones cuando se insertan en lotes están "intactas":

  • Una entidad Job , que tiene una relación de uno a muchos con la entidad Tag.
  • Una relación uno a uno con Category .
  • Una relación de uno a uno con Type .

Lo que estoy haciendo ahora es insertar las entidades manualmente en una tarea en segundo plano:

 container.performBackgroundTask { context in for job in jobs { let jobToInsert = Job(context: context) let type = JobType(context: context) let category = Category(context: context) jobToInsert.id = Int32(job.id) .... do { print("Inserting jobs") try context.save() } catch { // log any errors } }

¿Hay alguna forma de mejorar el rendimiento tal vez haciendo esto de una manera que no conozco? Porque para el usuario, cuando inicia la aplicación, insertar los trabajos uno por uno no es una experiencia muy agradable porque primero, lleva mucho tiempo (más de 2 minutos) y segundo porque mi UI no se actualiza automáticamente como yo Estoy insertando las entidades.

¡Muchas gracias por adelantado!

EDITAR: También veo que aumenta la memoria y después de tomar la captura de pantalla y antes de detener el proceso, vi la memoria en 1.09 GB

ingrese la descripción de la imagen aquí

EDIT 2: Este es el código que usé al intentar insertar los trabajos por lotes:

 private func newBatchInsertRequest(with jobs: [JobCodable]) -> NSBatchInsertRequest { var index = 0 let total = jobs.count let batchInsert = NSBatchInsertRequest( entity: Job.entity()) { (managedObject: NSManagedObject) -> Bool in guard index < total else { return true } if let job = managedObject as? Job { let type = JobType(context: self.container.viewContext) let category = Category(context: self.container.viewContext) let data: JobCodable = jobs[index] job.id = Int32(data.id) ... return batchInsert

Desafortunadamente, la relación no se puede construir debido probablemente al contexto. ya que obtengo el Thread 13: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) en la línea let category = Category(context: self.container.viewContext)

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

¿Está llamando a save() en el contexto de cada trabajo que inserta? Si es así, comenzaría allí: si desea cargar un montón de trabajos a la vez, puede insertar todas sus instancias de trabajo, configurar las relaciones y luego solo save() una vez al final (fuera del ciclo) .

Esto no solo le ahorrará tiempo, sino que también hará que parezca que todos los objetos aparecen al mismo tiempo en su interfaz de usuario. Si eso no es lo que desea, puede experimentar guardando en lotes dentro del ciclo; por ejemplo, solo llame a save() cada mil objetos Job.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda