CloudKit Удалить Self опция для CKReference не работает
Кто-нибудь имеет опыт использования CloudKit
возможность DeleteSelf
для CKReference
? Вот что я получил из документов:
DeleteSelf
Действие удаления для ссылочных записей. Удаление записи также удаляет все записи, содержащие объекты CKReference, которые указывают на эту запись. Удаление дополнительных записей может привести к каскадному удалению большего количества записей. Удаления являются асинхронными в зоне по умолчанию и немедленными в пользовательской зоне.
Итак, я проверял это, я создал несколько CKReference
объекты как с использованием CloudKit Dashboard
и с помощью моего приложения. Всякий раз, когда я делаю это с моим приложением, я создаю ссылку следующим образом:
let reference:CKReference = CKReference(recordID: savedFriend.friendID, action: CKReferenceAction.DeleteSelf)
Я знаю, что он назначается для удаления самого себя, потому что на приборной панели он показывает опцию:
Я должен делать что-то не так, потому что всякий раз, когда я иду и вручную удаляю эту запись, на которую ссылается панель инструментов, или настраиваю мое приложение на ее удаление программным путем, запись исчезает, но ссылка никогда не удаляется. Я подумал, может, мне стоит подождать, и это произойдет в конце концов, но несколько часов спустя он все еще там отмечен, как будто он должен был удалить себя. Это немного расстраивает, потому что я разработал часть своего кода, предполагая, что это сработает, теперь у меня может быть приложение, которое тратит ресурсы, пытаясь найти CKRecord
этого больше не существует. Должен ли я просто не полагаться на это, чтобы когда-либо работать? Я ценю любую помощь или совет, который я могу получить.
ОБНОВЛЕНИЕ ~ 04/07/2016
Я бросил пистолет, возвращаясь сюда и публикуя обновление, что проблема решилась сама собой. Я не был полностью убежден, что проблема не возникнет снова, поэтому я искал немного уверенности прошлой ночью. Я создал 5 разных CKRecords
и создал различные разные CKReference
объекты для ссылки на них по всей моей базе данных. Затем я приступил к установке CKReferenceAction.DeleteSelf
опция для каждой ссылки (я попробовал два вручную через панель инструментов, а остальные три сделали программно). В любом случае, я подождал несколько минут, а затем удалил записи, на которые есть ссылки... через десять минут ссылки все еще присутствовали. Я ждал еще 5-10 минут, и они все еще были там, поэтому я лег спать, предполагая, что они обязательно должны были уйти к утру, верно? Неправильно! Двенадцать часов спустя CKReference
записи все еще там, и ссылки на записи все еще ушли. Я определенно почесал голову, кажется, что это ошибка с CloudKit
, Я должен отметить, что я также заметил странное поведение на своей панели. В течение последних четырех дней, в нижнем левом углу, они постоянно говорили, что это "переиндексация данных разработки", вот картинка, например:
Может ли это быть причиной этой проблемы? Кто-нибудь знаком с этой проблемой и знает способ ее решения? Мы ценим любые предложения. Я подал отчет об ошибке в Apple.
1 ответ
Скорее всего, это проблема разрешения.
Каскадное удаление будет работать только в том случае, если пользователь, удаляющий записи, имеет права "записи" для всех записей, которые необходимо удалить. Таким образом, в инструментальной панели CloudKit каскадное удаление будет работать только для записей, созданных с помощью учетной записи разработчика iCloud.
Смотрите мой ответ там: /questions/38577725/atribut-ckreference-deleteself-ne-imeet-nikakogo-effekta/38577734#38577734