UserDefault 总是返回 nil

3

UserDefaults在我的应用程序中无法工作。请查找下面的代码,在AppDelegate文件中。

let sharingData = UserDefaults.init(suiteName: "group.macuser79.xxx");
sharingData?.set("vincenzo", forKey:"username");
sharingData?.synchronize();
在Watch应用的InterfaceController中,为了能够检索值,我完成了以下操作:
override func awake(withContext context: Any?) {
let sharingData = UserDefaults.init(suiteName: "group.macuser79.xxx");

let username = sharingData?.object(forKey: "username");
    print("Value username \(username)");
}

请告诉我,我做错了什么!


3
首先要查看的是在两个目标的项目能力选项卡中是否定义了 group.macuser79.xxx 组。 - Otávio
@Otávio。你好,我已经检查了目标中是否定义了该组,并且已经在目标 iPhone 中定义,在目标 <MyApp> Watch 中也定义,在 <MyApp> Watch 扩展中也定义了,看起来一切都没问题。我还更新了配置文件,但不幸的是仍然没有解决问题。 - macuser
@Otávio 如果您愿意,我可以放置您的所有代码,包括AppDelegate和恢复应用程序WatchKit内的信息的方法,但我认为这是如此微不足道的事情,以至于我无法理解出了什么错误。我认为这是模拟器的问题,事实上我注意到远程URL的请求要么为空,要么需要很长时间,大约10分钟,而在模拟器iPhone上进行相同的请求非常快速。 - macuser
抱歉让你感到困惑,但我并不是说我拥有这段代码,完全不是。我只是想将你的实现与我的进行比较,而且它们两个(纯属巧合,因为这是一段微不足道的代码)恰好相同。不需要删除任何代码。正如你所说,这段代码甚至在苹果的示例中也有。 - Otávio
1
让我们在聊天中继续这个讨论 - macuser
显示剩余4条评论
3个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
0
在Swift3中,UserDefaults变得更加智能,可以轻松获取存储的值。在下面这行代码中,你可以存储String类型的值而无需指定它!:
sharingData?.set("vincenzo", forKey:"username");

所以,为了得到那个结果,你需要像下面这样编写:

let username = sharingData?.string(forKey: "username");
    print("Value username \(username)");
}

这是一个更好的上下文,可以根据您的 Store 获取值。


你好, 感谢您的回答,但不幸的是它并没有起作用。我已经按照我的指示更正了代码,但不幸的是值始终为nil。我也在iPhone模拟器上启动了应用程序,但不幸的是它仍然无法工作。 - macuser
你好, 我在互联网上做了一些研究,在这个链接中,用户遇到了和我一样的问题。 https://dev59.com/Bpvga4cB1Zd3GeqPzEKM这应该是苹果手表模拟器的问题。现在我该怎么解决才能尝试测试我的应用程序?我只剩下一个选择,然后就可以发布了。 谢谢, Vincenzo - macuser

0

试试这个:

let defaults = UserDefaults.standard 
defaults.set("group.macuser79.xxx", forKey:"username")
defaults.synchronize()

访问商店:

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

我承认我以前没有尝试过对自己的UserDefaults实例进行init(),但是iOS将其制作成单例的标准实例是一个好的使用实践。

另外,不要忘记正确地解包可选项。


嗨,我按照你的指示尝试了一下,但不幸的是它总是空值。 - macuser
抱歉!请阅读以下链接获取更多信息:https://dev59.com/IF8d5IYBdhLWcg3wQwa5#32002403 - dokun1
你好, 我在互联网上做了一些研究,在这个链接中,用户遇到了和我一样的问题。 https://dev59.com/Bpvga4cB1Zd3GeqPzEKM这应该是苹果手表模拟器的问题。现在我该如何解决,以便我可以尝试测试我的应用程序?我只剩下一个出路,然后我就可以发布了。 谢谢, Vincenzo - macuser

0

设置:

UserDefaults(suiteName: "group.macuser79.xxx")?.set("vincenzo", forKey: "username")

访问方式:

UserDefaults(suiteName: "group.macuser79.xxx")!.string(forKey: "username")

你好, 我尝试了我所指示的,但不幸的是它没有起作用。 此时我认为模拟器存在问题,因为我不知道还有什么其他原因。 我会借一只Apple Watch给朋友,以确定这是否是问题所在。 感谢您的支持。 Vincenzo - macuser
你好, 我在互联网上进行了一些研究,在这个链接中用户遇到的问题和我遇到的问题是一样的。 https://dev59.com/Bpvga4cB1Zd3GeqPzEKM这应该是苹果手表模拟器的问题。那么我该怎么解决,以便我可以尝试测试我的应用程序?我只剩下一个出路,然后我就可以发布了。 谢谢, Vincenzo - macuser
你好, 我在互联网上做了一些研究,在这个链接中,用户遇到了和我一样的问题。 https://dev59.com/Bpvga4cB1Zd3GeqPzEKM这应该是苹果手表模拟器的问题。现在我该如何解决,以便我可以尝试测试我的应用程序?我只剩下一个出路,然后我就可以发布了。 谢谢, Vincenzo - macuser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,