Порядок изменения записей 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 и т. д.) - Изменяйте записи по одной, чтобы они получали уникальное время модификации.
Не зная более конкретных деталей о вашем приложении, я бы предпочел решение для вторичного идентификатора. Если вы не хотите усложнять свою базу данных и ваше приложение не будет изменять огромные пакеты записей одновременно, последнее решение может быть более подходящим.