2015-09-25 2 views
6

Как работает .DeleteSelf действительно работает? Docs говорит:CKReference .DeleteSelf атрибут не влияет

Когда действие эталонного объекта устанавливается в CKReferenceActionDeleteSelf, цель ссылки-то есть, записи, хранящейся в Справочной в RecordId собственности, становится владельцем в исходной записи. Удаление записи цели (владельца) удаляет все записи .

но мое впечатление, что удаление цели не всегда приведет к удалению источника. И это довольно раздражает, когда он остается в контейнере, клиент загружает его и ожидает, что контрольная точка находится где-то, но цель не существует при создании среза хранилища данных сервера на клиенте?

Как вы относитесь к этому случаю? Вы игнорируете такие записи? Или периодически вы просматриваете хранилище CloudKit, ища поврежденные записи для их удаления?

Или вместо удаления записи лучше установить атрибут, который находится в удаленном состоянии, но сохранить его в базе данных?

+0

Вы должны иметь возможность полагаться на .DeleteSelf. Если это не сработает, вам следует создать отчет об ошибке на странице http://bugreport.apple.com. Если вы хотите создать обходной путь для этой ошибки, и поскольку вы контролируете, что происходит в тот момент, когда вы удаляете запись, я думаю, было бы лучше также вручную удалить все связанные записи в тот же самый момент. –

+0

Я также вижу прерывистое поведение с .DeleteSelf –

+0

Я сталкиваюсь с этой проблемой. У меня есть несколько таблиц с отношением «один ко многим» к главной таблице. В публичной базе данных я добавляю основную запись, а затем некоторые записи в других таблицах. Если это все сделано от одного пользователя, а другие пользователи даже не обращаются к данным, то удаление основной записи приводит к удалению всех остальных записей, как ожидалось. Но как только другой пользователь обращается к данным, каскадное удаление не происходит, и только основная запись удаляется. Кажется бессмысленным, если вы не можете рассчитывать на эту функцию. – rmaddy

ответ

0

Если вы удаляете панель CloudKit Dashboard, вам нужно подождать до переключения типов записей, чтобы проверить другой конец ссылки. Скорее всего, вы переключились до того, как действительно произошло удаление. Вы можете использовать веб-инспектор Safari на вкладке «Сеть», чтобы проверить, закончилось ли удаление. Удаление нескольких записей занимает очень много времени.

1

я просто боролся с этим на некоторое время, и я думал, что я хотел бы поделиться своими выводами ...

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

Если вам нужно удалить записи, которые не принадлежат пользователю, удаляющему их, вы можете добавить разрешения «запись» для типа записи в разделе «Безопасность».

enter image description here

+0

Мои записи находятся в той же зоне, созданной тем же пользователем, и ссылки по-прежнему не удаляются. Я думаю, что это ошибка в панели CloudKit Dashboard. И да, это все еще происходит в конце 2017 года. :) –