2013-02-19 20 views
6

Mam aplikację skonfigurowaną do korzystania z usługi iCloud. Dodaję klucz/wartość do NSUbiquitousKeyValueStore i mogę pobrać go zgodnie z oczekiwaniami na wszystkich moich urządzeniach. Jeśli jednak usunę dane iCloud mojej aplikacji z poziomu Ustawień, spodziewam się, że wszystkie dane iCloud dodane do NSUbiquitousKeyValueStore również zostaną usunięte, ale tak nie jest. Jestem w stanie odzyskać wszystkie dane, bez względu na to, jak długo chcę zsynchronizować usługę iCloud.Usunięcie danych iCloud nie powoduje usunięcia NSUbiquitousKeyValueStore?

Poszedłem na developer.icloud.com i obejrzałem, jak moje inne dane iCloud (korzystam również z Core Data over iCloud) są usuwane poprawnie, ale ich nie ma w folderze, w którym NSUbiquitousKeyValueStore przechowuje dane z tego co wiem.

Czy ktoś wie, czy to ma być usunięte? Wygląda to jak "wyciek pamięci w chmurze", jeśli użytkownik nie może tego usunąć.

Odpowiedz

6

To jak to zrobić:

NSUbiquitousKeyValueStore *kvStore = [NSUbiquitousKeyValueStore defaultStore]; 
NSDictionary *kvd = [kvStore dictionaryRepresentation]; 
NSArray *arr = [kvd allKeys]; 
for (int i=0; i < arr.count; i++){ 
    NSString *key = [arr objectAtIndex:i]; 
    [kvStore removeObjectForKey:key]; 
} 
+0

Dziękuję za odpowiedź. Nie zastanawiam się, jak ręcznie usunąć wartości - ta część jest oczywista. Próbuję sprawdzić, czy jest to sposób, aby użytkownik usunął te dane. Wpisałem wartość w wszechobecnym sklepie, aby stwierdzić, czy już coś ustawiłem i chcę ponownie uruchomić operację, jeśli użytkownik usunie dane z iCloud. Ale jeśli użytkownik ma sposób na usunięcie swoich danych, ta metoda może nie działać. – lehn0058

+0

Oh, ok.Można użyć NSMetadataQuery, aby ustalić, czy plik danych rdzenia jest nadal dostępny. –

+0

Tak, muszę wiedzieć, czy określone urządzenie zostało skonfigurowane, nie tylko jeśli są tam dzienniki transakcji. Myślę, że zamierzam zaimplementować własny NSUbiquityKeyValueStore przy użyciu kontenera wszechobecności i plików, które tworzę. W ten sposób wartości na pewno zostaną usunięte, gdy użytkownik usunie swoje dane iCloud. – lehn0058

2

Usuwanie iCloud "dokumenty i dane" po prostu usuwa żadnych dokumentów i danych Core. Nie usuwa niczego w NSUbiquitousKeyValueStore. Spodziewałem się, że usunie WSZYSTKO z aplikacji.

Przed dodaniem wsparcia dla usługi iCloud użyłem NSUserDefaults do przechowywania małych fragmentów danych dla aplikacji. Na przykład użytkownik końcowy może wpisać swoją nazwę i adres, a ja zapisałbym to w NSUserDefaults. Nie jest to złożona informacja i nie powinienem używać jej do przechowywania danych podstawowych lub płaskiego pliku. Bardzo łatwo jest tam go przechowywać i działa. Jeśli usunę aplikację z telefonu, ta informacja zniknie, czego oczekiwałbym. Kiedy dodałem obsługę iCloud, umieściłem ją w NSUbiquitousKeyValueStore. Jednak nawet po usunięciu aplikacji, a następnie usunięciu "dokumentów i danych", nazwa użytkownika końcowego i adres są NASTĘPNIE tam.

Myślałem, że robię coś złego. Po większej części dnia przeprowadzania badań odkryłem, że magazyn wartości klucza iCloud ma być przeznaczony dla "dyskretnych" danych, a "składnica danych klucz-wartość" iCloud nie jest czymś, co zobaczy użytkownik. "

Tak więc, chociaż doskonale nadaje się do przechowywania niezebranych danych użytkownika, które użytkownik końcowy faktycznie widzi, nie jest to zamierzone użycie. To, co robię "źle", to używanie go do niezamierzonego użycia, chociaż działa dobrze w tym celu.

Nie jestem pewien, dlaczego Apple nie usunąłoby WSZYSTKIEGO z usługi iCloud. Lub przynajmniej dać użytkownikowi możliwość.

1

Prawidłowe jest, że NSUbiquitousKeyValueStore pozostaje po usunięciu aplikacji. W momencie usunięcia urządzenie nie wie, czy pozostałe urządzenia będą nadal chciały udostępnić te dane.

byłoby go używać do przechowywania in-app stanu zakupu, dane użytkownika itp że chcesz być dzielone między urządzeniami, a przywrócone, jeśli aplikacja została przypadkowo usunięte (lub odinstalować, a następnie zainstalować ponownie później)

Z drugiej strony NSUserDefaults to dane należące do samej aplikacji na tym urządzeniu, więc usunięcie aplikacji powinno usunąć dane.

+0

Kiedy zatem NSUbiquitousKeyValueStore zostanie kiedykolwiek usunięty? Na pewno to nie tylko trwa wiecznie dla aplikacji, które już nie mogą być używane. Czy nie jest możliwe, aby użytkownik zmusił to do usunięcia w pewnym momencie? –

Powiązane problemy