CloudKit + Coredata : contenu dupliqué

Bonjour,

Je souhaite utiliser cloudkit pour synchroniser ma base de données (coredata) entre mes différents appareils. Les nouvelles données sont récupérées via un un webservice.

Le soucis est que cloudkit me duplique chaque ligne de ma base de données au lieu de fusionner. Le probleme est lié au fait que je récupère les données via le webservice + une synchronisation avec le cloud (par exemple pour les favoris,…).

Dans une autre app que j’ai faite dans laquelle je n’utilise pas de webservice, la synchronisation coredata dans le cloud ne pose aucun porbleme.

J’imagine qu’il va falloir que je supprime moi même les données dupliquées ou que je merge, mais je ne sais pas comment faire car la synchronisation cloudkit se fait directement avec coredata.

Pour le webservice j’ai déjà une fonction qui vérifie si un élément existe deja dans coredata

Une idée de comment faire ? cc @mbritto

voici mon bout de code dans la classe coredata :


    lazy var persistentContainer: NSPersistentContainer = {
        //let container = NSPersistentContainer(name: "monAPP") // sans synchro iCloud
        let container = NSPersistentCloudKitContainer(name: "monAPP") //synchro icloud
        
        // add for indexation spotlight //////////////////////////
        guard let description = container.persistentStoreDescriptions.first else {
            fatalError("###\(#function): Failed to retrieve a persistent store description.")
        }
        
        // Enable history tracking and remote notifications.
        description.type = NSSQLiteStoreType
        description.setOption(true as NSNumber, forKey: NSPersistentStoreRemoteChangeNotificationPostOptionKey)
        description.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)
        // END indexation spotlight //////////////////////////
        
        
        container.loadPersistentStores { description, error in
            if let error = error {
                fatalError("Unable to load persistent stores: \(error)")
            }
        }
        
        // add for indexation spotlight //////////////////////////
        spotlightIndexer = newsSpotlightDelegate(forStoreWith: description, coordinator: container.persistentStoreCoordinator)
        self.toggleSpotlightIndexing(enabled: true)
        
        
        container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy //aussi utile pour la sync icloud
        container.viewContext.automaticallyMergesChangesFromParent = true //aussi utile pour la sync icloud
        do {
            try container.viewContext.setQueryGenerationFrom(.current)
        } catch {
            fatalError("###\(#function): Failed to pin viewContext to the current generation:\(error)")
        }
        // END indexation spotlight //////////////////////////
        
        return container
    }()

merci d’avance