2013-02-19 35 views
6

我有一個配置爲使用iCloud的應用程序。我正在向NSUbiquitousKeyValueStore添加一個鍵/值,我可以在所有設備上按預期檢索它。但是,如果我從設置下刪除了我的應用程序的iCloud數據,我希望所有添加到NSUbiquitousKeyValueStore的iCloud數據都將被刪除,但事實並非如此。無論我想讓iCloud同步多長時間,我都可以檢索所有數據。刪除iCloud數據不會清除掉NSUbiquitousKeyValueStore?

我已經去了developer.icloud.com,看着我的其他iCloud數據(我也在使用Core Data over iCloud)被正確刪除,但他們沒有任何文件夾,NSUbiquitousKeyValueStore保留了我所知道的數據。

有誰知道這是否應該刪除?如果用戶不能刪除它,它看起來有點像「雲內存泄漏」。

回答

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

感謝您的回覆。我不想知道如何手動刪除值 - 這一部分是顯而易見的。我正在嘗試查看它們是否是用戶刪除此數據的一種方式。我正在關注無處不在的商店中的價值,以告訴我是否已經設置了某些東西,並且如果用戶刪除了他們的iCloud數據,我想重新運行該操作。但是,如果用戶確實有辦法刪除他們的數據,那麼這種方法可能不起作用。 – lehn0058 2013-02-19 17:19:41

+0

噢,好的。您可以使用NSMetadataQuery來確定核心數據文件是否仍然存在 – 2013-02-19 21:19:34

+0

是的,我需要知道是否已經設置了特定的設備,而不僅僅是事務日誌在那裏。我想我將使用我創建的無處不在的容器和文件來實現我自己的NSUbiquityKeyValueStore。這樣,當用戶刪除他們的iCloud數據時,值肯定會被刪除。 – lehn0058 2013-02-19 22:04:37

2

刪除iCloud的「文件和數據」只是刪除任何文件和核心數據。它不會刪除NSUbiquitousKeyValueStore中的任何內容。我的期望是它會刪除有關應用程序的一切。

在添加iCloud支持之前,我使用NSUserDefaults來存儲應用程序的小塊數據。例如,最終用戶可以輸入他們的姓名和地址,我將它存儲在NSUserDefaults中。這不是複雜的數據,我不應該使用核心數據或平面文件來存儲它。它很容易存儲在那裏,它的工作原理。如果我從手機中刪除了該應用程序,該信息將會消失,這正是我所期望的。當我添加iCloud支持時,我將其放入NSUbiquitousKeyValueStore。但是,即使我刪除應用程序,然後刪除「文檔和數據」,最終用戶名和地址仍然存在。

我以爲我做錯了什麼。在一天中的大部分時間進行研究後,我發現iCloud鍵值存儲應該用於「離散」數據,而「iCloud鍵值數據存儲不是用戶會看到的。」

因此,雖然它完全能夠存儲最終用戶實際看到的非複雜用戶數據,但這不是預期用途。我所做的「錯誤」是將其用於非預期的用途,儘管它適用於該用途。

我不確定爲什麼蘋果不會從iCloud中刪除所有東西。或者至少讓用戶有能力。

1

NSUbiquitousKeyValueStore在應用程序刪除後保持不變是正確的。 在刪除時,設備不知道您的其他設備是否仍需要該共享數據。

你會用它來存儲應用程序內購買狀態,您希望將設備之間的共享,並恢復如果應用程序被意外刪除用戶信息等(或卸載,然後重新安裝後)

另一方面,NSUserDefaults是屬於該設備本身的數據,因此刪除應用程序應刪除數據。

+0

那麼NSUbiquitousKeyValueStore何時會被刪除?當然,這不僅僅是爲了不再使用的應用程序而堆積如山。用戶是否有可能在某個時候強制刪除它? – 2017-02-15 18:26:58