2015-06-20 5 views
12

Я создаю приложение iOS с помощью CloudKit.Удаленные записи CloudKit Reappear

Он должен позволить пользователю добавлять, редактировать и удалять Products в облаке. Пользователь может организовать их в папках. Эти папки представляют собой только другие типы записей в облачном виде. Нет ограничений на уровни папки, которую пользователь может использовать, поскольку любая папка может просто содержать CKReference в родительской папке. Вся связь CloudKit в моем приложении происходит в специальном классе CloudKitController

Это все работает, но перестает работать через некоторое время без какой-либо ясной причины.

Когда я тестирую свое приложение, у меня нет даже папок пользователя, которые имеют несколько уровней. Однако, после использования его в течение (до недели), все удаленные записи появляются снова на CloudKit. Несколько примечаний по этому вопросу:

  • Когда я возвращаю приборную панель CloudKit и начинаю все заново, он отлично работает. Никаких изменений кода не было.
  • Очевидно, что я постоянно редактирую свой код, поскольку приложение находится в разработке. Однако я вообще не редактирую типы данных в своем коде, которые должны храниться в CloudKit. Когда я это сделаю, эта проблема не возникает позже.
  • Изменения в облачной панели CloudKit (например, добавление типов данных) не приводят к этой проблеме
  • Не храните записи локально, как в основных данных. Они просто сидят в синглете, пока я их использую.
  • Когда я перехожу в панель CloudKit, тип записи продукта показывает, что у нее есть, например, 13 случаев. Иногда это так плохо, что мое приложение на самом деле загружает более 100. Я также могу их увидеть, когда я перехожу к recordZone, но все же RecordType говорит, что он имеет только 13 экземпляров.
  • Удаление этих записей в CloudKit Dashboard только заставляет их исчезать для в то время как. Когда я перезагружаю страницу, они снова появляются.

Это происходит вот уже некоторое время, и я проверил свой код, библиотеку Apple и Google много раз, но я не могу понять, что вызывает эту проблему.

Вопрос: Кто-нибудь знает что-нибудь о том, как преодолеть эту проблему? Как я уже сказал, я работал в этом несколько недель, и сброс моей панели CloudKit только «исцеляет» ее до недели, а затем снова появляется. Я также был бы более чем счастлив опубликовать любой код, если это поможет вам ответить на мой вопрос. Сначала я не размещал какой-либо код, так как я не знаю, какой код может вызвать это.

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

+0

У меня была такая же проблема. Я продолжаю пытаться удалить один из моих типов записей, но записи по-прежнему будут возвращаться через некоторое время, что является проблематичным, потому что тип записи фактически изменился (тип облачного типа записи показывает, что фактически исключает любые поля, которые не были распространены между старым и новый). Как странно. – Narwhal

+0

Приятно знать, что, по крайней мере, я не единственный. В этом случае возникает ли эта проблема после выполнения конкретной задачи в приложении или базе данных? – Joris416

+0

Я обманывал кучу, поэтому не уверен. В любом случае, я полностью перезагружаю базу данных, и я делаю это с тех пор. Тем не менее, я бы не хотел этого делать, если бы было уже сохранено много данных (до сих пор ничего, что я сохранил, не было важно и может быть очищено). – Narwhal

ответ

2

Apple ответила на сообщение об ошибке, которое я сообщил, что этот вопрос должен быть разрешен с помощью iOS 9.Пока это кажется правильным, поскольку этот вопрос не повторился, но, пожалуйста, дайте мне знать, если это все еще беспокоит кого-то.

+2

Теперь это случилось со мной. Удаленные записи нигде не видны в Dashboard, но волшебным образом появились в моем приложении. – DogCoffee

+0

Да, я тоже потерял 5 часов, чтобы найти ошибку на моей стороне. Ошибка в IOS 9.3. Сброс среды разработки позволил решить проблему ... – Prine

1

Это может произойти из-за приборную панель след ниже предлагает 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" 
     } 
    }, 
    ... 

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

Смежные вопросы