Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

345
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!