Параметр CloudKit Delete Self для CKReference не работает

Есть ли у кого-нибудь опыт использования опции CloudKit для DeleteSelf для CKReference? Вот что я получил из документов:

Удалить себя

Действие удаления для записей, на которые есть ссылки. При удалении записи также удаляются все записи, содержащие объекты CKReference, которые указывают на эту запись. Удаление дополнительных записей может привести к каскадному удалению большего количества записей. Удаление является асинхронным в зоне по умолчанию и немедленным в пользовательской зоне.

Итак, я тестировал это, я создал несколько объектов CKReference как с помощью CloudKit Dashboard, так и с помощью моего приложения. Всякий раз, когда я делаю это со своим приложением, я создаю ссылку следующим образом:

let reference:CKReference = CKReference(recordID: savedFriend.friendID, action: CKReferenceAction.DeleteSelf)

Я знаю, что ему назначено самоудаление, потому что на панели управления он показывает, что опция отключена: < img src="https://i.stack.imgur.com/cpEw1.png" alt="удалить самостоятельную галочку">

Должно быть, я что-то делаю неправильно, потому что всякий раз, когда я иду и вручную удаляю запись, на которую есть ссылка с помощью панели инструментов, или настраиваю свое приложение на ее удаление программно, запись исчезает, но ссылка никогда не удаляется. Я подумал, что, может быть, мне следует просто подождать, и в конце концов это произойдет, но несколько часов спустя он все еще отмечен галочкой, как будто он должен был удалить себя. Это немного расстраивает, потому что я разработал часть своего кода, предполагая, что это будет работать, теперь у меня может быть приложение, которое тратит ресурсы впустую, пытаясь найти CKRecord, которого больше не существует. Должен ли я просто не полагаться на то, что это когда-либо сработает? Я ценю любую помощь или совет, который я могу получить.

ОБНОВЛЕНИЕ ~ 07.04.2016

Я поторопился, вернувшись сюда и опубликовав сообщение о том, что проблема решилась сама собой. Я не был полностью уверен, что проблема не появится снова, поэтому прошлой ночью я искал утешения. Я создал 5 разных CKRecords и создал разные CKReference объекты, чтобы ссылаться на них в своей базе данных. Затем я приступил к установке параметра CKReferenceAction.DeleteSelf для каждой ссылки (я попробовал два вручную через панель инструментов, а три других сделал программно). В любом случае, я подождал несколько минут, а затем удалил записи, на которые есть ссылки... через десять минут все ссылки все еще присутствовали. Я подождал еще 5-10 минут, а они все еще были там, поэтому я пошел спать, предполагая, что к утру они точно должны исчезнуть, верно? Неправильный! Двенадцать часов спустя записи CKReference все еще существуют, а записи, на которые есть ссылки, все еще отсутствуют. Я точно ломаю голову, похоже, это баг с CloudKit. Я должен упомянуть, что я также заметил некоторое странное поведение в моей приборной панели. В течение последних четырех или около того дней внизу в левом нижнем углу постоянно говорилось, что это «Переиндексация данных разработки», вот, например, картинка: уведомление о переиндексации

Может ли это быть причиной этой проблемы? Кто-нибудь знаком с этой проблемой и знает способ решить эту проблему? Мы ценим любые предложения. Я подал отчет об ошибке в Apple.


person Pierce    schedule 07.04.2016    source источник
comment
Вы установили какие-либо элементы управления доступом или разрешения, которые могут мешать? Я только что сделал быстрый тест в приборной панели. Я создал объект одного типа. Я создал объект второго типа. Во втором объекте я помещаю ссылку на первый объект и устанавливаю DeleteSelf. Затем я удалил первый объект. Второй объект был удален   -  person Paulw11    schedule 07.04.2016
comment
Вау, у тебя должно быть какое-то волшебное влияние на богов CloudKit. Я подчеркивал эту проблему большую часть дня, и сразу после того, как я прочитал ваш комментарий, я пошел, чтобы сделать еще несколько тестов и проверить свои разрешения, и теперь ВСЕ ссылки, которые не удалялись ушел ... Я ничего не трогал, я просто снова перезагрузил панель управления. Я рад, что они теперь работают из ниоткуда, но я также сбит с толку. Почему я столкнулся с примерно 8-часовой задержкой удаления? Это может вызвать проблемы, если это происходит часто после разработки.   -  person Pierce    schedule 07.04.2016
comment
Могут быть задержки, но обычно всего несколько секунд. Я не уверен, почему вы увидели 8 часов.   -  person Paulw11    schedule 07.04.2016
comment
Что ж, я просто буду надеяться, что это была случайность, потому что я только что провел еще один тест, и, похоже, он работает нормально. Спасибо за ваш ответ и ваше волшебное моджо! ;-)   -  person Pierce    schedule 07.04.2016
comment
@Paulw11Paulw11 - У вас есть оценка среднего времени, которое вы заметили между удалением ваших записей и удалением ссылок? Я больше не испытываю задержек в диапазоне часов, но я все еще замечаю, продолжая тестировать, что часто ссылки удаляются примерно за 10 минут или около того. Это типичное поведение для CloudKit? Это все еще кажется мне чрезмерным и неэффективным.   -  person Pierce    schedule 07.04.2016
comment
Серверы icloud должны быть очень большим лесом серверов, и у вас есть лес серверов между вами и ими в Интернете. Вы должны учитывать задержку во что бы то ни стало, как говорится. Я, кстати, тоже видел задержки, это абсолютно нормально. Проведите исследование методов БД.   -  person user3069232    schedule 07.04.2016
comment
Это имеет смысл, вы знаете, я определенно ожидал, что будет некоторая задержка, но часы довольно чрезмерны! С сожалением сообщаю, что проблема снова возникла. Я хотел убедиться, что проблема решена, поэтому вчера вечером я протестировал добавление некоторых ссылок и удаление записей, на которые ссылаются. Они не исчезли примерно через 15 минут, поэтому я пошел спать, а затем проверил сегодня утром, и они все еще там! Спустя более 12 часов. Это расстраивает, если не сказать больше.   -  person Pierce    schedule 07.04.2016
comment
Я вижу эту же проблему здесь, в сентябре 2017 года, на недавно переработанной панели инструментов CloudKit. Удаление ссылок кажется ненадежным, поэтому я на всякий случай удалю все ссылки вручную.   -  person Clifton Labrum    schedule 07.09.2017
comment
Март 2018 года, и я вижу эту проблему. Это явно ошибка iCloud — и вот почему: я удаляю родительскую запись на панели управления CloudKit, затем перехожу к дочерней записи (которой теперь не должно быть из-за настройки deleteSelf) и вижу ссылку на родителя. Когда я нажимаю стрелку, которая должна привести меня к родителю, панель инструментов дает сбой и просит меня поделиться данными о сбое с Apple.   -  person James Toomey    schedule 17.03.2018


Ответы (1)


Скорее всего, это проблема с разрешением.

Каскадное удаление будет работать только в том случае, если пользователь, удаляющий записи, имеет права «записи» для всех записей, которые необходимо удалить. Таким образом, на панели инструментов CloudKit каскадное удаление будет работать только для записей, созданных с помощью учетной записи iCloud разработчика.

Смотрите мой ответ там: https://stackoverflow.com/a/38606004/6643055

person Yann Bodson    schedule 27.07.2016