2016-02-02 16 views
6

Pracuję nad synchronizacją CloudKit w mojej aplikacji (model "Małe dane, wszystkie urządzenia", ze strefą niestandardową w prywatnej bazie danych).Co to jest clientChangeTokenData w CKModifyRecordsOperation?

CKModifyRecordsOperation zawiera clientChangeTokenData własność NSData typu, który jest opisany w docs następująco:

Podczas modyfikacji zapisów z operacji FETCH określić dane klienta generowane Reklamowe stosując tę ​​właściwość, aby wskazać, która wersja rekord, który ostatnio zmodyfikowałeś. Porównaj token danych, który podałeś, z tokenem danych w następnym pobraniu rekordu, aby potwierdzić, że serwer pomyślnie odebrał ostatnie żądanie zmodyfikowania urządzenia.

Nie rozumiem, dlaczego powinienem zawracać sobie głowę, biorąc pod uwagę, że przy każdym żądaniu, otrzymuję blok ukończenia, który mówi mi, czy serwer pomyślnie otrzymał moją prośbę. Dlaczego muszę ręcznie porównywać token klienta?

Czy podanie numeru clientChangeTokenData jest wymagane do prawidłowego obchodzenia się z moim przypadkiem użycia? Śledzę zmiany danych lokalnych i pcham wszystko w kolejce po każdej zmianie danych. Zdalne zmiany są śledzone poprzez subskrypcję strefy.

Jeśli jest to wymagane, w jaki sposób wygenerować ten token poprawnie, biorąc pod uwagę, że mam wszystkie rodzaje zmian rekordów w moim CKModifyRecordsOperation (moje cele wykorzystania API dla operacji wsadowych). Jaki jest tutaj ogólny przepływ pracy?

Dziękuję.

Odpowiedz

3

Masz tylko jeden powód, aby sprawdzić token, jeśli masz lokalne zmiany, które chcesz zapisać w CloudKit i chcesz się upewnić, że zmiany są oparte na najnowszej wersji danych w CloudKit.

Można również po prostu zignorować token i zapisać dane. Jeśli dane uległy zmianie w międzyczasie, otrzymasz błąd CloudKit i wtedy możesz go obsłużyć.

+0

"KlientChangeTokenData" wydaje się być zerowe z bloków zakończenia "CKModifyRecordsOperation'. Czy jest to coś, co my (programiści) musimy wygenerować i przekazać do operacji przed dodaniem jej do kolejki operacji? To nie jest jasne. –

+0

Należy sprawdzić klucz o nazwie recordChangeTag Jest on automatycznie generowany przez CloudKit –

+0

Ustawiasz clientChangeTokenData podczas modyfikacji. Następnie sprawdza się, czy pasuje do zakończenia synchronizacji, np. CKFetchRecordZoneChangesOperation. Dlaczego chciałbyś to zrobić ... Nie jestem jeszcze pewien. – malhal

1

Nie jest jasne, ale domyślam się, że clientChangeTokenData jest przydatny w przypadku wysyłania dużej operacji modyfikacji rekordów, np. usunięcie 100 rekordów, co zajmuje dużo czasu. Wtedy powiedzieć aplikacja wysyła żądanie pobierał w innej operacji z zapytaniem (lub pobrać zmianami) zestaw wyników, które będą dotknięte zmianami, które:

  1. jest uruchomiony i działa równolegle do istniejącego modyfikować działanie, które Hasn Jeszcze nie skończyłem.
  2. jest uruchamiany przed zakończeniem przetwarzania przez serwer wyników poprzednich modyfikacji (dokumenty mają tendencję do opóźniania przetwarzania).

Jeśli zakończenie pobierania zawiera inną wartość niż clientChangeTokenData dla wysłanej z modyfikacją, oznacza to, że nie otrzymała jeszcze (lub nie zakończyła przetwarzania?) Zmian. W tej sytuacji można albo błąd, z alertem, aby powiedzieć, że serwer potrzebuje więcej czasu, albo automatycznie ponowić pobieranie po pewnym czasie.

Nawiasem mówiąc, w moich testach ten token jest przypisany do urządzenia.