Подтвердить что ты не робот

Удаленные записи 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 только "исцеляет" ее до недели, а затем снова появляется. Я также был бы более чем счастлив опубликовать любой код, если это поможет вам ответить на мой вопрос. Вначале я не размещал какой-либо код, так как я не знаю, какой код может вызвать это.

Любой ответ будет высоко оценен

4b9b3361

Ответ 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"
        }
    },
    ...

Что касается количества записей, да, мои тоже неточно.