6

我有一个配置为使用 iCloud 的应用程序。我正在向 NSUbiquitousKeyValueStore 添加一个键/值,我可以在我的所有设备上按预期检索它。但是,如果我从“设置”下删除我的应用程序的 iCloud 数据,我希望我添加到 NSUbiquitousKeyValueStore 的所有 iCloud 数据也会被删除,但事实并非如此。无论我希望 iCloud 同步多长时间,我都能检索到所有数据。

我去了 developer.icloud.com 并看到我的其他 iCloud 数据(我也在 iCloud 上使用 Core Data)被正确删除,但它们不是 NSUbiquitousKeyValueStore 保存其数据的文件夹,我可以告诉它。

有谁知道这是否应该被删除?如果用户无法删除它,这似乎有点像“云内存泄漏”。

4

5 回答 5

8

我就是这样做的:

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];
}
于 2013-02-19T17:11:23.200 回答
3

这将清除它。#if DEBUG是为了防止您意外发送此代码。

斯威夫特 5.2

#if DEBUG
let allKeys = NSUbiquitousKeyValueStore.default.dictionaryRepresentation.keys
for key in allKeys {
    NSUbiquitousKeyValueStore.default.removeObject(forKey: key)
}
#endif
于 2020-08-17T20:18:55.547 回答
2

删除 iCloud“文档和数据”只会删除所有文档和 CORE 数据。它不会删除 NSUbiquitousKeyValueStore 中的任何内容。我的期望是它会删除有关该应用程序的所有内容。

在添加 iCloud 支持之前,我使用 NSUserDefaults 为应用程序存储小块数据。例如,最终用户可以输入他们的姓名和地址,我会将其存储在 NSUserDefaults 中。它不是复杂的数据,我不需要使用核心数据或平面文件来存储它。将其存储在那里非常容易并且可以正常工作。如果我从手机中删除该应用程序,该信息就会消失,这正是我所期望的。当我添加 iCloud 支持时,我将其放入 NSUbiquitousKeyValueStore。但是,即使我删除应用程序,然后删除“文档和数据”,最终用户名和地址仍然存在。

我以为我做错了什么。经过一天大部分时间的研究,我发现 iCloud 键值存储应该用于“离散”数据,并且“iCloud 键值数据存储不是用户会看到的”。

因此,虽然它完全能够存储最终用户实际看到的非复杂用户数据,但这不是预期用途。我做的“错误”是将它用于非预期用途,尽管它适用于该用途。

我不确定为什么 Apple 不会从 iCloud 中删除所有内容。或者至少让用户有能力。

于 2015-01-14T19:20:35.083 回答
2

删除应用后保留 NSUbiquitousKeyValueStore 是正确的。在删除的那一刻,设备不知道您的其他设备是否仍需要该共享数据。

您可以使用它来存储您希望在设备之间共享的应用内购买状态、用户详细信息等,并在应用被意外删除(或卸载,然后稍后重新安装)时恢复

另一方面,NSUserDefaults 是属于该设备上应用程序本身的数据,因此删除应用程序应该删除数据。

于 2016-04-18T10:52:26.237 回答
1

这是一个功能而不是错误。如果您为所有用户提供一次性的东西(例如每个人从 50 个免费积分开始),您需要某种方式来确保他们不会删除所有内容然后重新获得 50 个免费积分。

于 2020-07-27T23:28:04.477 回答