CloudKit integration seeding, conflicted objects log

Hello,

I have an issue in an app which is yet unreleased.

The app uses Core Data, and I recently added CloudKit integration.

Whenever I start the app data get automatically downloaded by CloudKit and I get this log:


<NSCloudKitMirroringDelegate: 0x600001da61b0> - Never successfully initialized and cannot execute request '<NSCloudKitMirroringImportRequest: 0x6000024c88a0> D3FB21AB-94ED-40B7-859B-6CBEE6149473' due to error: Error Domain=NSCocoaErrorDomain Code=134404 "(null)" UserInfo={NSDetailedErrors=(

"Error Domain=NSCocoaErrorDomain Code=133021 \"(null)\" UserInfo={NSExceptionOmitCallstacks=true, conflictList=(\n \"NSConstraintConflict (0x600003f40e00) for constraint (\\n name\\n): database: 0x8143748c0004e8e1 <x-coredata://272191BB-7D10-41DD-8E4B-56F4ECE4AB9F/Ingredient/p195>, conflictedObjects: (\\n \\\"0x8143748c181ce8e1 <x-coredata://272191BB-7D10-41DD-8E4B-56F4ECE4AB9F/Ingredient/p1733>\\\"\\n)\",\n \"NSConstraintConflict (0x600003f42fc0) for constraint (\\n name\\n): database: 0x8143748c029ce8e1 <x-coredata://272191BB-7D10-41DD-8E4B-56F4ECE4AB9F/Ingredient/p101>, conflictedObjects:


This is just the initial part of the log; the above line is repeated many times, with different IDs of course.


To give you some context, the app has a list of Ingredients, which is seeded the first time the app is launched. I have a seed version constant, which is compared to a "seedversion" parameter, persisted to core data (and consequently cloudkit).

Ingredients has a constraint on the "name" property, which is a string.


I guess, for some reason, the seed was launched multiple times, and ingredients got duplicated; in plainer terms,I might have multiple instances of "cheese", deriving from different seeds.

I already have set the conflict merge policy in the NSPersistentCloudKitContainer initialization:


container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy


Yet I still get the error.

I looked at th docs and google for some suggestions, but I haven't found anything useful.

Any suggestion?

Cheers,

Davide

Replies

Hello,

where you able to fix this issue? I'm currently fighting with the same problem.

Best,

Leo
NSPersistentCloudKitContainer does not support unique constraints.

instead allow it to import all records and resolve the conflicts yourself or migrate the data to another store file which more accurately models your constraints.
Dear Frameworks Engineer, How can you recommend to resolve conflicts. Does any callback exist when NSPersistentCloudKitContainer finishes sync?