【问题标题】:Is sharing UserDefaults between iOS and tvOS still possible?是否仍然可以在 iOS 和 tvOS 之间共享 UserDefaults?
【发布时间】:2018-04-04 12:53:16
【问题描述】:

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

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

这些是我共享数据的步骤:

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

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

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

3:验证 myproject.entitlements 一切都设置好。

4:验证 developer.apple.com 上的 App Group 是否为我的包标识符启用。

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,但保存这个简单的字符串应该没问题。

【问题讨论】:

  • 你在哪里读到UserDefaults 的最大大小是500kb?我想在您的设备中有足够的空间之前没有限制。
  • @TheTiger 感谢您的回复。我在这个链接上找到了:stackoverflow.com/a/32781011/6414904
  • 现在在为tvOS指定后可能是正确的。
  • 我阅读了论坛的答案,虽然该问题是针对tvOS 的,但答案并未具体说明。苹果哥明明说NSUserDefaults is allowed, and supports up to 500KB of data.我想知道!!

标签: ios swift nsuserdefaults tvos


【解决方案1】:

Apple 在UserDefaults 文档中明确指出

除了教育机构中的托管设备外, 用户的默认值本地存储在单个设备上,并持久化 用于备份和恢复。同步首选项和其他数据 在用户连接的设备上,使用NSUbiquitousKeyValueStore 而是。

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

至于它的 (NSUbiquitousKeyValueStore) 限制,文档说

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

【讨论】:

  • 我的错,我完全错过了文档中的这一点,但这确实解决了问题。谢谢!
  • There is a per-key value size limit of 1 MB, and a maximum of 1024 keys. 哦,这就是为什么很少有人说没有限制,所以他们可能会考虑使用多个键。很高兴知道!
  • @TheTiger 请注意,这是针对NSUbiquitousKeyValueStore - 而不是UserDefaults(理论上不受空间限制)
  • 好的,但为什么this answerUserDefaults 的?
猜你喜欢
  • 2021-11-28
  • 1970-01-01
  • 2018-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-13
相关资源
最近更新 更多