使用Swift快速通过iCloud同步用户数据和首选项

2018年4月13日

这是用户的常见要求……“我有iPad和iPhone,如何将我的收藏夹保存在一个设备上,让它们出现在另一台设备上?”

如果用户必须创建一个帐户才能使用您的应用,则可以将此功能内置到您的后端中。 但是,有时候,我们不想强迫用户创建帐户来使用我们的应用程序。 在这种情况下,有一个简单的解决方案,只需几行代码即可跨设备同步用户数据。 这是iCloud键值存储。 它就像本地词典一样工作,对于每个iCloud用户而言都是唯一的,并且会自动在该用户所属的每个设备之间进行同步。

如果您使用userDefaults存储用户数据,那么您已经到了一半。 iCloud键值存储的工作方式非常相似,其附加好处是数据可以在应用删除后继续存在。

假设有两个设备的用户下载了您的应用,他们将生日输入到一个设备中并保存了。 您要将这些数据存储到iCloud键值存储中,以便当他们在另一台设备上打开您的应用程序时,生日将已经自动存在。 这是做什么的…

在Xcode中选择您的项目目标,然后打开“功能”部分。 激活iCloud并确保选中“键值存储”。

首先,创建一个keyValueStore。 您可以根据需要创建任意数量的字典,每个字典实际上都是不同的字典。 我通常创建一个全局实例,然后可以从任何类中调用它。

var keyStore = NSUbiquitousKeyValueStore() 

将数据添加到您的keyStore

 keyStore.set("03/04/1989", forKey: "userBirthdate") 

检索应用程序新实例上的数据

 if let storedUserBirthdate = keyStore.string(forKey: "userBirthdate") { 
//Use retrieved birthdate
} else {
//Ask user for birthdate
}

到目前为止,keyStore的行为与UserDefaults完全相同,即数据将仅存储在本地。 为了允许所有iCloud用户的设备访问数据,您需要通过以下方式进行同步:

 keyStore.synchronize() 

真的就是这么简单。

要记住的一件事是同步不一定立即发生。 正如Apple Docs所说:同步发生在“适当的稍后时间”。 iCloud键值存储旨在同步不需要持续和超快速更新的数据。 用户设置和偏好设置之类的东西。


最初于 2018 年4月13日 发布在 janakshah.co.uk