是否仍然可以在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,但保存这个简单的字符串应该没问题。
答案 0 :(得分:4)
Apple在UserDefaults
文档中明确指出
除教育机构中的托管设备外,a 用户的默认值存储在本地设备上,并保持不变 用于备份和恢复。同步首选项和其他数据 在用户的已连接设备上,使用
NSUbiquitousKeyValueStore
代替。
正如它所说,你应该使用基于iCloud的NSUbiquitousKeyValueStore
进行同步数据存储。
至于其({{1}})限制,文档说
对于给定用户,应用的键值存储中可用的总空间量为1 MB。每个键的值大小限制为1 MB,最多为1024个键。