是否仍然可以在iOS和tvOS之间共享UserDefaults?

时间:2018-04-04 12:53:17

标签: ios swift nsuserdefaults tvos

是否仍然可以在iOS和tvOS之间共享UserDefault?

在我的Xcode项目中,我使用UserDefaults在我的iOS目标和我的tvOS目标之间共享数据。当我尝试从我的tvOS应用程序获取数据时,我始终从UserDefaults收到nil值。

以下是我分享数据的步骤:

1:为两个目标添加应用组。两个目标都使用相同的应用程序组ID: 的 group.nl.mycompany.myappname 即可。

我使用的是.nl域名,但这应该没问题,因为这也适用于我的其他项目。

2:确认两个目标具有相同的部署目标。 我尝试使用10.0和11.0。

3:验证myproject.entitlements,确保一切正常。

4:在developer.apple.com上验证应用程序组是否已启用我的包标识符。

5:两个目标都具有相同的捆绑ID。我还尝试使用2个不同的包标识符。

6:我从iOS应用程序写入UserDefaults的方式:

guard let defaults = UserDefaults(suiteName: "group.nl.mycompany.myappname") else { return }
defaults.set("Apple", forKey: "username")
defaults.synchronize()

我通过获取如下值来确认这在我的iOS应用中有效:

guard let defaults = UserDefaults(suiteName: "group.nl.mycompany.myappname") else { return nil }
defaults.synchronize()
let name = defaults.string(forKey: "username")

这确实会回归“Apple”。

7:打开我的tvOS应用程序并调用此代码返回nil:

guard let defaults = UserDefaults(suiteName: "group.nl.mycompany.myappname") else { return nil }
defaults.synchronize()
let name = defaults.string(forKey: "username")

是否可能已删除UserDefaults分享?在您的手机和观看链接here之间共享UserDefaults的情况类似。我还读到AppleTV的UserDefaults的最大大小为500kb,但保存这个简单的字符串应该没问题。

1 个答案:

答案 0 :(得分:4)

Apple在UserDefaults文档中明确指出

  

除教育机构中的托管设备外,a   用户的默认值存储在本地设备上,并保持不变   用于备份和恢复。同步首选项和其他数据   在用户的已连接设备上,使用NSUbiquitousKeyValueStore   代替。

正如它所说,你应该使用基于iCloud的NSUbiquitousKeyValueStore进行同步数据存储。

至于其({{1}})限制,文档说

  

对于给定用户,应用的键值存储中可用的总空间量为1 MB。每个键的值大小限制为1 MB,最多为1024个键。