Удаленные записи CloudKit Reappear
Я создаю приложение iOS с помощью CloudKit.
Он должен позволять пользователю добавлять, редактировать и удалять Products
в облаке. Пользователь может организовать их в папках. Эти папки представляют собой только другие типы записей в облачном виде. Не существует ограничений на уровни папки, которые пользователь может использовать, так как любая папка может просто удерживать CKReference
родительскую папку Folder. Вся связь CloudKit в моем приложении происходит в выделенном классе CloudKitController
Все это работает, но перестает работать через некоторое время без какой-либо ясной причины.
Когда я тестирую свое приложение, у меня даже нет пользовательских папок, которые имеют несколько уровней. Однако, после использования его в течение (до недели), все удаленные записи появляются снова на CloudKit. Несколько замечаний по этому поводу:
- Когда я reset панель инструментов CloudKit и начинаю все заново, она работает отлично. Никаких изменений кода не было.
- Очевидно, что я постоянно редактирую код, поскольку приложение находится в разработке. Однако я вообще не редактирую типы данных в своем коде, которые должны храниться в CloudKit. Когда я это делаю, этот вопрос не возникает позже.
- Изменения в облачной панели CloudKit (например, добавление типов данных) не вызывают этой проблемы.
- Я не сохраняю записи локально, как в основных данных. Они просто сидят в синглете, пока я их использую.
- Когда я перехожу в панель CloudKit Dashboard, тип записи продукта показывает, что он имеет, например, 13 случаев. Иногда это так плохо, что мое приложение на самом деле загружает более 100. Я также могу видеть их, когда я иду в recordZone, но все же RecordType говорит, что он имеет только 13 экземпляров
- Удаление этих записей в CloudKit Dashboard только заставляет их исчезать некоторое время. Когда я перезагружаю страницу, они снова появляются.
Это происходит уже некоторое время, и я проверял свой код, библиотеку Apple и Google много раз, но не могу понять, что вызывает эту проблему.
Вопрос:
Кто-нибудь знает что-нибудь о том, как преодолеть эту проблему? Как я уже сказал, я работал в этом несколько недель, и сброс моей панели CloudKit только "исцеляет" ее до недели, а затем снова появляется. Я также был бы более чем счастлив опубликовать любой код, если это поможет вам ответить на мой вопрос. Вначале я не размещал какой-либо код, так как я не знаю, какой код может вызвать это.
Любой ответ будет высоко оценен
Ответы
Ответ 1
Apple ответила на сообщение об ошибке, которое я зарегистрировал, что эта проблема должна быть решена с помощью iOS 9. До сих пор это кажется правильным, поскольку эта проблема не повторялась снова, но, пожалуйста, дайте мне знать, если это все еще беспокоит кого-то.
Ответ 2
Это может произойти из-за того, что в нижней части панели управления показано, что Apple использует метод Tombstone для репликации удалений через распределенную базу данных. Один из узлов может иметь ошибку или старую версию программного обеспечения и синхронизирует ложное поле надгробия по всей системе, заставляя запись самостоятельно восстановить. Или, может быть, что-то, что делает ваш код, случайно возвращает эти удаленные записи? Обходным решением было бы использовать ваше собственное логическое поле soft-delete и посмотреть, как оно себя ведет.
[{
"results": [{
"tombstone": false
"id": "NewItem",
"etag": "ibgs5bpj",
"recordType": "Items",
"fields": {
"name": "Malc",
"location": {
"latitude": 38.0,
"longitude": -122.0
}
},
"conflictLosersEtags": [],
"created": {
"timestamp": 1435514295943,
"user": "_0ac573ae502ca7ca9d763a84b27bc42a",
"device": "_2"
},
"modified": {
"timestamp": 1435514295943,
"user": "_0ac573ae502ca7ca9d763a84b27bc42a",
"device": "_2"
}
},
...
Что касается количества записей, да, мои тоже неточно.