2013-02-19 8 views
6

Ich habe eine App, die für die Verwendung von iCloud konfiguriert ist. Ich füge dem NSUbiquitousKeyValueStore einen Schlüssel/Wert hinzu und kann ihn erwartungsgemäß auf allen meinen Geräten abrufen. Wenn ich jedoch die iCloud-Daten meiner App unter Einstellungen lösche, würde ich erwarten, dass alle iCloud-Daten, die ich zu NSUbiquitousKeyValueStore hinzugefügt habe, ebenfalls gelöscht würden, aber das ist nicht der Fall. Ich kann alle Daten abrufen, egal wie lange ich die iCloud synchronisieren möchte.Durch das Löschen von iCloud-Daten wird NSUbiquitousKeyValueStore nicht gelöscht?

Ich bin auf developer.icloud.com gegangen und sah zu, wie meine anderen iCloud-Daten (ich benutze auch Core Data über iCloud) ordnungsgemäß gelöscht werden, aber es ist kein Ordner, wo NSUbiquitousKeyValueStore seine Daten von dem was ich sagen kann.

Weiß jemand, ob dies gelöscht werden soll? Es scheint ein bisschen wie ein "Cloud-Speicherleck" zu sein, wenn der Benutzer dies nicht löschen kann.

Antwort

6

Dies ist, wie ich es tun:

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

Danke für Ihre Antwort. Ich frage mich nicht, wie man die Werte manuell löscht - dieser Teil ist offensichtlich. Ich versuche zu sehen, ob es eine Möglichkeit für den Benutzer ist, diese Daten zu löschen. Ich tippte einen Wert im allgegenwärtigen Speicher ab, um festzustellen, ob ich bereits etwas eingerichtet hatte, und ich möchte die Operation erneut ausführen, wenn ein Benutzer seine iCloud-Daten löscht. Wenn der Benutzer jedoch eine Möglichkeit zum Löschen seiner Daten hat, funktioniert diese Methode möglicherweise nicht. – lehn0058

+0

Oh, ok.Sie könnten eine NSMetadataQuery verwenden, um festzustellen, ob die Kerndatendatei immer noch da ist. –

+0

Ja, ich muss wissen, ob ein bestimmtes Gerät eingerichtet wurde, nicht nur, ob die Transaktionsprotokolle da sind. Ich denke, ich werde meinen eigenen NSUbiquityKeyValueStore mit dem Ubiquity-Container und den von mir erstellten Dateien implementieren. Auf diese Weise werden die Werte mit Sicherheit gelöscht, wenn ein Benutzer seine iCloud-Daten löscht. – lehn0058

2

Löschen von iCloud „Dokumente und Daten“ löscht nur alle Dokumente und CORE-Daten. Es löscht nichts im NSUbiquitousKeyValueStore. Meine Erwartung war, dass es ALLES an der App löschen würde.

Vor dem Hinzufügen der iCloud-Unterstützung verwendete ich NSUserDefaults, um kleine Daten für die App zu speichern. Zum Beispiel könnte der Endbenutzer seinen Namen und seine Adresse eingeben, und ich würde das in NSUserDefaults speichern. Es sind keine komplexen Daten, und ich sollte keine Kerndaten oder eine Flat-Datei verwenden müssen, um sie zu speichern. Es ist sehr einfach dort zu speichern und es funktioniert. Wenn ich die App vom Telefon lösche, wäre diese Information weg, was ich erwarten würde. Als ich die iCloud-Unterstützung hinzugefügt habe, habe ich das in den NSUbiquitousKeyValueStore eingefügt. Jedoch, selbst wenn ich die App lösche und dann "Dokumente und Daten" lösche, ist der Endbenutzername und die Adresse dort immer noch.

Ich dachte, ich würde etwas falsch machen. Nachdem ich den größten Teil eines Tages damit verbracht hatte, Recherchen durchzuführen, stellte ich fest, dass iCloud-Schlüsselwertspeicher für "diskrete" Daten gedacht ist und dass der "iCloud-Schlüsselwert-Datenspeicher nicht etwas ist, was ein Benutzer sehen würde".

So, während es durchaus in der Lage ist, nicht-komplexe Benutzerdaten zu speichern, die der Endbenutzer tatsächlich sieht, ist das nicht die beabsichtigte Verwendung. Was ich "falsch" mache, ist es für eine nicht beabsichtigte Verwendung, obwohl es gut für diesen Zweck funktioniert.

Ich bin mir nicht sicher, warum Apple ALLES nicht von iCloud löschen würde. Oder geben Sie dem Benutzer zumindest die Möglichkeit dazu.

1

Es stimmt, dass NSUbiquitousKeyValueStore nach dem Löschen der App bleibt. Zum Zeitpunkt des Löschens weiß das Gerät nicht, ob Ihre anderen Geräte diese freigegebenen Daten noch benötigen.

Sie würden es verwenden, um ein In-App-Kauf-Status zu speichern, Benutzerdaten etc., die Sie wollen zwischen den Geräten gemeinsam genutzt werden, und wieder hergestellt, wenn die App versehentlich gelöscht wurde (oder deinstalliert, dann später wieder eingebaut)

NSUserDefaults hingegen sind Daten, die auf dem Gerät selbst zur App gehören. Wenn Sie also die App löschen, sollten Sie die Daten löschen.

+0

Wann wird der NSUbiquitousKeyValueStore jemals gelöscht? Sicherlich staut sich das nicht für immer mehr Apps auf, die nicht mehr genutzt werden können. Ist es nicht möglich, dass ein Benutzer das Löschen irgendwann erzwingt? –

Verwandte Themen