在 iOS 和 tvOS 之间共享 UserDefaults 是否仍然可能?
Is sharing UserDefaults between iOS and tvOS still possible?
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 是否为我的包标识符启用了应用程序组。
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")
这确实returns"Apple".
7:打开我的 tvOS 应用程序并调用此代码 returns nil:
guard let defaults = UserDefaults(suiteName: "group.nl.mycompany.myappname") else { return nil }
defaults.synchronize()
let name = defaults.string(forKey: "username")
是否有可能 UserDefaults
共享已被删除?在 AppleTV 的 phone 和 watch link . I also read that the maximum size of UserDefaults
is 之间共享 UserDefaults
时发生了类似的事情,但保存这个简单的字符串应该没问题。
Apple 在 UserDefaults
文档中明确指出
With the exception of managed devices in educational institutions, a
user’s defaults are stored locally on a single device, and persisted
for backup and restore. To synchronize preferences and other data
across a user’s connected devices, use NSUbiquitousKeyValueStore
instead.
如其所说,您应该使用iCloud-based NSUbiquitousKeyValueStore
进行同步数据存储。
至于它的 (NSUbiquitousKeyValueStore
) 限制,文档说
The total amount of space available in your app’s key-value store, for a given user, is 1 MB. There is a per-key value size limit of 1 MB, and a maximum of 1024 keys.
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 是否为我的包标识符启用了应用程序组。
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")
这确实returns"Apple".
7:打开我的 tvOS 应用程序并调用此代码 returns nil:
guard let defaults = UserDefaults(suiteName: "group.nl.mycompany.myappname") else { return nil }
defaults.synchronize()
let name = defaults.string(forKey: "username")
是否有可能 UserDefaults
共享已被删除?在 AppleTV 的 phone 和 watch link UserDefaults
is UserDefaults
时发生了类似的事情,但保存这个简单的字符串应该没问题。
Apple 在 UserDefaults
文档中明确指出
With the exception of managed devices in educational institutions, a user’s defaults are stored locally on a single device, and persisted for backup and restore. To synchronize preferences and other data across a user’s connected devices, use
NSUbiquitousKeyValueStore
instead.
如其所说,您应该使用iCloud-based NSUbiquitousKeyValueStore
进行同步数据存储。
至于它的 (NSUbiquitousKeyValueStore
) 限制,文档说
The total amount of space available in your app’s key-value store, for a given user, is 1 MB. There is a per-key value size limit of 1 MB, and a maximum of 1024 keys.