2015-09-25 14 views
6

Jak działa .DeleteSelf naprawdę działa? Docs mówi:Atrybut CKReference .DeleteSelf nie ma żadnego efektu

Kiedy działanie obiektu odniesienia jest ustawiony na CKReferenceActionDeleteSelf, w celu odniesienia, to znaczy rekordu przechowywanych w odnośniku za recordID właściciela staje się właścicielem rekordu źródłowego. Usunięcie rekordu celu (właściciela) powoduje usunięcie wszystkich jego rekordów źródłowych.

ale mam wrażenie, że usunięcie celu nie zawsze spowoduje usunięcie źródła. I jest to dość denerwujące, gdy pozostaje w kontenerze, klient pobiera go i spodziewa się, że punkt odniesienia gdzieś się znajduje, ale cel nie istnieje podczas budowania fragmentu składnicy danych serwera na kliencie?

Jak traktujesz tę sprawę? Ignorujesz tego rodzaju zapisy? Lub okresowo sprawdzasz pamięć masową CloudKit, szukając uszkodzonych rekordów, aby je usunąć?

Czy zamiast usuwania rekordu lepiej jest ustawić atrybut, który jest w stanie usuniętym, ale zachować go w bazie danych?

+0

powinien móc polegać na .DeleteSelf. Jeśli to nie zadziała, powinieneś utworzyć raport o błędzie pod adresem http://bugreport.apple.com Jeśli chcesz utworzyć obejście tego błędu i masz kontrolę nad tym, co dzieje się w momencie usuwania zapisz Myślę, że najlepiej byłoby ręcznie usunąć wszystkie powiązane rekordy w tym samym momencie. –

+0

Obserwuję także sporadyczne zachowanie z .DeleteSelf –

+0

Zaczynam używać tego problemu. Mam kilka tabel o relacji jeden do wielu dla tabeli głównej. W publicznej bazie danych dodaję rekord główny, a następnie kilka rekordów w innych tabelach. Jeśli wszystko to jest wykonywane przez jednego użytkownika, a żaden inny użytkownik nie uzyskuje dostępu do danych, usunięcie rekordu głównego spowoduje usunięcie wszystkich pozostałych rekordów zgodnie z oczekiwaniami. Ale gdy inny użytkownik uzyska dostęp do danych, kasowanie nie nastąpi, a tylko rekord główny zostanie usunięty. Wydaje się bezsensowne, jeśli nie możesz liczyć na tę funkcję. – rmaddy

Odpowiedz

0

W przypadku usuwania za pomocą CloudKit Dashboard należy poczekać przed przełączeniem typów rekordów, aby sprawdzić drugi koniec odwołania. Najprawdopodobniej przełączyłeś się przed faktycznym usunięciem. Możesz użyć przeglądarki internetowej Safari na karcie Sieć, aby sprawdzić, kiedy usuwanie zostało faktycznie zakończone. Usunięcie wielu rekordów zajmuje bardzo dużo czasu.

1

właśnie zmagał się z tym przez chwilę i pomyślałem, że podzielę moje wyniki ...

To jest zasadniczo kwestia zgody. Usuwanie kaskadowe działa tylko wtedy, gdy użytkownik usuwając zapisy ma uprawnienia "zapisu" do wszystkich rekordów, które należy usunąć. Tak więc w CloudKit Dashboard usuwanie kaskadowe działa tylko dla rekordów utworzonych na koncie iCloud programisty.

Jeśli chcesz usunąć rekordy, które nie należą do użytkownika, który je usunął, możesz dodać uprawnienia "zapisu" dla typu rekordu w obszarze Zabezpieczenia.

enter image description here

+0

Moje rekordy znajdują się w tej samej strefie utworzonej przez tego samego użytkownika, a referencje nadal nie są usuwane. Myślę, że to błąd w Dashboard CloudKit. I tak, to wciąż dzieje się pod koniec 2017 roku. :) –

Powiązane problemy