Как работает .DeleteSelf действительно работает? Docs говорит:CKReference .DeleteSelf атрибут не влияет
Когда действие эталонного объекта устанавливается в CKReferenceActionDeleteSelf, цель ссылки-то есть, записи, хранящейся в Справочной в RecordId собственности, становится владельцем в исходной записи. Удаление записи цели (владельца) удаляет все записи .
но мое впечатление, что удаление цели не всегда приведет к удалению источника. И это довольно раздражает, когда он остается в контейнере, клиент загружает его и ожидает, что контрольная точка находится где-то, но цель не существует при создании среза хранилища данных сервера на клиенте?
Как вы относитесь к этому случаю? Вы игнорируете такие записи? Или периодически вы просматриваете хранилище CloudKit, ища поврежденные записи для их удаления?
Или вместо удаления записи лучше установить атрибут, который находится в удаленном состоянии, но сохранить его в базе данных?
Вы должны иметь возможность полагаться на .DeleteSelf. Если это не сработает, вам следует создать отчет об ошибке на странице http://bugreport.apple.com. Если вы хотите создать обходной путь для этой ошибки, и поскольку вы контролируете, что происходит в тот момент, когда вы удаляете запись, я думаю, было бы лучше также вручную удалить все связанные записи в тот же самый момент. –
Я также вижу прерывистое поведение с .DeleteSelf –
Я сталкиваюсь с этой проблемой. У меня есть несколько таблиц с отношением «один ко многим» к главной таблице. В публичной базе данных я добавляю основную запись, а затем некоторые записи в других таблицах. Если это все сделано от одного пользователя, а другие пользователи даже не обращаются к данным, то удаление основной записи приводит к удалению всех остальных записей, как ожидалось. Но как только другой пользователь обращается к данным, каскадное удаление не происходит, и только основная запись удаляется. Кажется бессмысленным, если вы не можете рассчитывать на эту функцию. – rmaddy