3lvis / Sync

JSON to Core Data and back. Swift Core Data Sync.
MIT License
2.55k stars 263 forks source link

Duplicate values in the many-to-many relationship. #548

Closed jahir8a closed 5 years ago

jahir8a commented 5 years ago

First I want to congratulate you for such an excellent tool and for the excellent support.

I have the following problem I am duplicating records in one of the service entities, also add hyper.isPrimaryKey = true but I always get duplicate records.

This is the structure of json that he used

{  
   "estado":1,
   "establecimientos":[  
      {  
         "id":"1",
         "nombre_empresa":"Hotel",
         "direccion":"Centro",
         "telefono":"27758564",
         "correo":"hotel@gmail.com",
         "pagina_web":null,
         "horario":"24 horas",
         "mostrar":"1",
         "descripcion":"Le brindamos un excelente servicio",
         "wifi":"1",
         "latitud":"14.2657",
         "longitud":"-87.5455",
         "tipo_establecimiento":"1",
         "servicios":[  
            {  
               "id":"1",
               "servicio_ofrecido":"Alojamiento"
            },
            {  
               "id":"3",
               "servicio_ofrecido":"Desayunos"
            },
            {  
               "id":"2",
               "servicio_ofrecido":"Lavanderia"
            }
         ]
}

The result I get is 1 record for establishments and 6 records for services, I am using your demo project. captura de pantalla 2018-12-06 a la s 8 12 42 a m

That is my model of CoreData captura de pantalla 2018-12-06 a la s 8 03 36 a m Sorry for my english. Thanks in advance.

Greetings.

3lvis commented 5 years ago

Hola @jahir8a!

Un poco extraño tu problema, en tu ejemplo estado es PrimaryKey de Servicio? O de frente estas pasando el array de Establecimientos a Sync?

jahir8a commented 5 years ago

Nuevamente te felicito por el gran empeño que le has dedicado a esta herramienta.

Bueno estado es solo una parámetro que me indica si todo salió bien o ocurrió un error, este es código que tengo para convertir la clave establecimientos en un arreglo de diccionarios como lo espera el metodo sync. captura de pantalla 2018-12-06 a la s 12 09 43 p m

Este es el resultado en consola de la conversión

[["wifi": 1, "correo": hotelcomayagua@gmail.com, "categorias": <NSSingleObjectArrayI 0x60000001c680>( { id = 1; "nombre_categoria" = Hoteles; } ) , "descripcion": Le brindamos un excelente servicio, "pagina_web": , "nombre_empresa": Hotel Comayagua, "longitud": -87.5455, "telefono": 27758564, "id": 1, "tipo_establecimiento": 1, "servicios": <NSArrayI 0x600000251b50>( { id = 1; "servicio_ofrecido" = Alojamiento; }, { id = 3; "servicio_ofrecido" = Desayunos; }, { id = 2; "servicio_ofrecido" = Lavanderia; } ) , "latitud": 14.2657, "pagos": <__NSArrayI 0x60000024ff30>( { "forma_pago" = Efectivo; id = 1; }, { "forma_pago" = Tarjeta; id = 2; }, { "forma_pago" = Ambos; id = 3; } ) , "rutas": <NSSingleObjectArrayI 0x60000001c8f0>( { id = 3; "nombre_ruta" = Alojamiento; } ) , "direccion": Centro comayagua, "mostrar": 1, "publicaciones_ids": <NSSingleObjectArrayI 0x60000001cb20>( 1 ) , "horario": 24 horas]] Y es este resultado es el que le paso a el metodo sync. self.dataStack?.sync(sync, inEntityNamed: "Establecimiento") { error in if let err = error{ print(err) } completion(.success) } Si necesitas algo mas para replicar este problema házmelo saber. Gracias por toda la ayuda.

3lvis commented 5 years ago

Hola @jahir8a, perdona por no responder antes, las vacaciones me agarraron ocupado. Espero que hayas logrado solucionar tu problema.

Feliz año!