Порядок изменения записей iCloud

Теперь я использую CKModifyRecordsOperation, чтобы добавить 5 записей в iCloud. Мой код такой:

let recordsToSave: [CKRecord] = [record1, record2, record3, record4, record5]
let operation = CKModifyRecordsOperation(recordsToSave: recordsToSave, recordIDsToDelete: [])

После успешного изменения 5 записей я использую CKQueryOperation для запроса всех записей, мой код выглядит следующим образом:

let predicate = NSPredicate(value: true)
let query = CKQuery(recordType: RECORDTYPE, predicate: predicate)
query.sortDescriptors = [NSSortDescriptor(key: "modificationDate", ascending: true)]
let operation = CKQueryOperation(query: query)

Я думал, что порядок выбранных записей будет записью1-запись2-запись3-запись4-запись5.

Но на самом деле порядок хаотичный. Это может быть 1-3-5-4-2, может быть 2-4-5-1-3 или любой другой. Это зависит от самого iCloud. Но я проверил эти 5 записей в iCloud Dashboard, дата изменения этих 5 записей одинакова.

Есть ли способ добиться желаемого порядка?

1 ответ

Решение

Когда базы данных сортируют по определенному свойству, они обычно возвращают записи с одинаковым значением для этого свойства в произвольном порядке по соображениям производительности. Если вам нужно сохранить этот порядок для этих записей, вы можете сделать одно из двух:

  • Добавьте свойство вторичного идентификатора, которое вы установили для каждой записи в этой операции изменения, и добавьте второй NSSortDescriptorна этой собственности. (в вашем примере вы должны установить значение этого свойства для записи1 на 1, для записи2 на 2 и т. д.)
  • Изменяйте записи по одной, чтобы они получали уникальное время модификации.

Не зная более конкретных деталей о вашем приложении, я бы предпочел решение для вторичного идентификатора. Если вы не хотите усложнять свою базу данных и ваше приложение не будет изменять огромные пакеты записей одновременно, последнее решение может быть более подходящим.

Другие вопросы по тегам