Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

346
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda