CKFetchRecordChangesOperation сначала возвращает ненужные данные
Когда previousServerToken имеет значение NULL, CKFetchRecordChangesOperation, кажется, занимает несколько проходов для загрузки первого набора данных, повторяя попытки до тех пор, пока флаг moreComing не будет сброшен.
Это не потому, что слишком много записей. В моем тестировании у меня было только около 40 записей участников, каждая из которых принадлежит одной из 6 групп.
Первый проход дает две плохо сформированные записи участника; второй проход иногда отправляет несколько записей участников из группы, которая еще не была загружена, или ничего. Только после третьего прохода он загружает все оставшиеся группы и участников, как и ожидалось.
Есть идеи, почему это может быть?
2 ответа
Это может произойти, если в зоне было удалено много записей. Сервер просматривает все изменения для зоны и затем удаляет изменения для записей, которые были удалены. Иногда это может привести к серии изменений с нулевыми изменениями записи, но moreComing
установите в true.
Посмотрите на новый fetchAllChanges
флаг на CKFetchRecordZoneChangesOperation
в iOS 10/macOS 10.12. CloudKit будет конвейерно получать запросы на изменения для вас, и вы будете просто видеть изменения записи и токены изменения зоны, пока все в зоне не будет выбрано.
Это проблема, которую это вызвало, и что я должен был с этим сделать...
У меня есть два типа групп записей и участников (которые должны иметь группу в качестве родителя).
Проблема в том, что, хотя CloudKit обычно сначала возвращает родителей записей, он делает это только в пределах одного пакета.
Поэтому элементы могут быть получены перед их родительской группой, если она находится в другом пакете (что может произойти, если группа была впоследствии отредактирована или переименована, поскольку это перемещает ее позже в порядке обработки)
Если вы используете массивы на своем устройстве для представления загруженных данных, вам необходимо либо кэшировать элементы в серии пакетов, и обрабатывать их в конце (после получения всех групп), либо разрешить записи для создания временной фиктивная группа, которая перезаписывается именем группы и другими данными, когда она в конечном итоге прибывает.