删除iCloud数据并不能清除NSUbiquitousKeyValueStore?

时间:2013-02-19 17:06:59

标签: ios icloud nsubiquitouskeyvaluestore

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

我已经去了developer.icloud.com并观看了我的其他iCloud数据(我也在iCloud上使用Core Data)被正确删除了,但是它们不是NSUbiquitousKeyValueStore保存其数据的文件夹。< / p>

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

5 个答案:

答案 0 :(得分:6)

我就是这样做的:

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];
}

答案 1 :(得分:2)

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

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

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

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

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

答案 2 :(得分:2)

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

Swift 5.2

#if DEBUG
let allKeys = NSUbiquitousKeyValueStore.default.dictionaryRepresentation.keys
for key in allKeys {
    NSUbiquitousKeyValueStore.default.removeObject(forKey: key)
}
#endif

答案 3 :(得分:1)

删除应用程序后,NSUbiquitousKeyValueStore仍然是正确的。 在删除时,设备不知道您的其他设备是否仍然需要该共享数据。

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

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

答案 4 :(得分:0)

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