2011-10-18 91 views
13

我想知道是否可以使用iCloud在設備之間同步應用程序的首選項文件。我正在討論的首選項文件是由NSUserDafults創建的用於存儲應用程序首選項的com.domain.appname.plist文件。我可以使用iCloud同步NSUserDefaults plist文件嗎?

我想讓我的應用程序的首選項文件在兩個不同設備(例如iPad和iPhone)之間保持同步。這是否可以接受使用iCloud同步?或者我需要將plist文件轉換爲不同類型的文檔,將其存儲在雲端,並在檢索後將其轉換回應用的首選項文件?

謝謝!

回答

13
+0

這實際上幾乎就是我所做的。我使用該代碼作爲教程,然後編寫了自己的實現,這需要用戶指定他們想要與iCloud同步,而不是透明地進行。我將此標記爲正確的答案,因爲MKiCloudSync代碼幫助我瞭解實施iCloud同步所需做的事情。 – Jackson

+0

是否有快速實施? – samir105

+1

Swift:https://github.com/ArtSabintsev/Zephyr – jamesk

11

可以在使用iCloud的設備之間同步首選項。不過,我建議不要在設備之間共享plist文件。

NSUbiquitousKeyValueStore應該適合你想要做的。它與NSUserDefaults非常相似,所以它應該很容易拾取。

要使用它,只需在您的授權文件中啓用com.apple.developer.ubiquity-kvstore-identifier權利,並且只需複製您想在無處不在的鍵值存儲中同步的首選項即可。一旦它處於無處不在的kvstore中,您將能夠從其他設備上的應用程序中看到它。只要使用相同的標識符,您甚至可以在不同的應用程序之間進行同步。

您還應該註冊NSUbiquitousKeyValueStoreDidChangeExternallyNotification通知,以監視新更改並相應地更新設備上的standardUserDefaults。

+0

這聽起來非常有用,我」很高興知道這是一個iCloud課程。我的應用程序使用存儲在plist中的網絡攝像機URL和相關信息(名稱,刷新率)的自定義列表。我想知道如果這樣的應用程序數據太多,以這種方式存儲(它限制爲64 kb)。這對於更簡單的設置來說可能更好,比如當前選擇哪個url等,但不適用於存儲應用程序數據。我已經有了一種方法讓用戶通過電子郵件導入和導出數據,並使用自定義URL方案,因此我試圖確定iCloud是否是最好的方式。 – Jackson

+2

無處不在的鍵值存儲當然更適合較小的設置值。如果您的數據可能超過64kb,則必須改爲使用基於文檔的同步。我會將應用程序數據寫入單獨的plist文件,並將其移至無處不在的iCloud容器中,以便將其同步到其他設備。我會說,使用iCloud並使設備之間的數據同步對您的用戶完全透明無疑是更好的體驗。 – kevinyc

16

類似MKiCloudSync一行做到這一點,我也有在GitHub庫呼籲SDCloudDefaults。不是自動同步,而是使用了一個新對象,而不是NSUserDefaults,它可以保存到iCloud和NSUserDefaults。這意味着您可以決定哪些元素存儲在本地,哪些存儲在雲中。

(我發現MKiCloudSync我已經實現了上去。我認爲這是聰明的,但我不想一切同步到iCloud,所以我的解決方案仍然適用於我更好。)

+0

非常感謝您的補充。我首先向MKiCLoudSync添加了一條if語句,但之後我沒有最終使用它,最終爲了我自己的目的而重新寫入它。我最終同步了所有內容,但只有當用戶這樣說(不會自動在後臺)時纔會同步。 – Jackson

+0

謝謝你,我正在尋找什麼 – davis

相關問題