当我尝试使用 UserDefaults(watchOS)从共享组中读取时,为啥我的值为零

Posted

技术标签:

【中文标题】当我尝试使用 UserDefaults(watchOS)从共享组中读取时,为啥我的值为零【英文标题】:Why is my value nil when i try to read from shared group using UserDefaults (watchOS)当我尝试使用 UserDefaults(watchOS)从共享组中读取时,为什么我的值为零 【发布时间】:2017-03-30 17:02:27 【问题描述】:

您好,我使用一个共享组来存储我需要从手表中读取的值,但由于某种原因,该值是 nil

我在开发者门户中创建了一个应用组,并在应用程序和功能下的 watchkit 扩展中启用并检查了该应用组。

我还忘记了什么? 有人可以帮帮我吗?

IOS APP: MainViewController.swift

    let defaults = UserDefaults.standard
    defaults.set(newUsername, forKey: "username")
    defaults.set(newCode, forKey: "password")
    defaults.synchronize()

    // when i print  defaults.string(forKey: "username")   here it
       returns me the username

手表扩展 InterfaceController.swift

    let defaults = UserDefaults.standard
    let userName = defaults.string(forKey: "username")!
    let password = defaults.string(forKey: "password")!

    // when i print  defaults.string(forKey: "username")   here it  
       returns me nil

我也尝试指定默认值,但没有运气。

let appGroupID = "group.tld.domain.appname"
if let defaults = UserDefaults(suiteName: appGroupID) 
   defaults.setValue(username, forKey: "username")
   defaults.setValue(password, forKey: "password")

【问题讨论】:

从 Watch OS 2 开始,通过 App Group 共享数据不再有效。您应该改为 Watch​Connectivity。这家伙和你有同样的问题。 forums.developer.apple.com/thread/3927 【参考方案1】:

如果您需要从 ios 应用程序共享数据来观看扩展,那么您应该使用 Session。实际上 Userdefaults 或核心数据的存储数据不能在没有会话的情况下通过。

【讨论】:

嗨,我对会话不熟悉,您能帮我解释更多有关它的信息或如何调整我的代码以使其正常工作吗?附:我在 google 中找不到太多有意义的会话 你好 Remco,你有没有得到你的解决方案。

以上是关于当我尝试使用 UserDefaults(watchOS)从共享组中读取时,为啥我的值为零的主要内容,如果未能解决你的问题,请参考以下文章

UserDefaults 没有第一次加载

在 UserDefaults 中设置对象数组

从其他 viewController 访问 Swift 中的 UserDefaults

从 UserDefaults 中提取 Picker

UserDefaults removeObjectForKey 不起作用?

检索 UserDefaults 后在 viewdidload 上刷新 collectionView