If your app stores user data in a database, there are a number of occasions where you may need to make changes to multiple objects at once. The most likely scenario is you are loading the initial database state for a new user as part of the onboarding process, but it may also come at times where a user modifies a bunch of records at once, or an app upgrade requires the app to modify those values somehow.
If you’re using CloudKit as your database, you follow the common advice: per Apple’s recommendation, and for the sake of performance, you want to make as few of these CloudKit operations as possible, so you create or modify records in one batch, using a CKModifyRecordsOperation
.
But then if you want to sort these records in order of when they were created, or last modified, using a creationDate
or modificationDate
NSSortDescriptor
, those records are out of order. You inserted them 1-2-3-4-5, but you get 2-4-3-5-1.
Even worse, every time you ask for those records, the order is different. So the next time, it’s 3-1-2-5-4.
I added the records in the order I wanted them; why is CloudKit messing up the order?
There are two things happening that cause this behavior: one of them is specific to CloudKit’s batch creation and modification, and one of them is common behavior across many database systems, including CloudKit. We’ll dig into both issues, and then talk about a couple of ways you can make your records sort by date cleanly.