【问题标题】:UserDefault always return nilUserDefault 总是返回 nil
【发布时间】:2017-03-28 03:12:10
【问题描述】:

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)");
}

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

【问题讨论】:

  • 替代解决方案:使用 GenericKeychain。 developer.apple.com/library/content/samplecode/GenericKeychain/…
  • 首先要看的是 group.macuser79.xxx 组在两个目标的项目功能选项卡中定义。
  • @Otávio。您好,我检查了该组是否在目标中定义并已定义。已在 iPhone 的目标中定义,既在目标 Watch 中定义,又在 Watch Extensions 中定义,看起来一切正常。我还更新了配置文件,但遗憾的是什么都没有。
  • 嗯,这段代码是我用 Objective-C 编写的代码的直接移植,所以我看不出任何错误。 sharingData 对象在这两种情况下都不为零吗?

标签: ios iphone swift3 watchkit userdefaults


【解决方案1】:

Swift3 UserDefaults 中获得存储值变得更加智能。在下面的行中,您正在存储 String 值而不指定它!:

sharingData?.set("vincenzo", forKey:"username");

所以,为了得到它,你需要像下面这样写:

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

这是根据您的商店获取价值的更好的上下文。

【讨论】:

  • 您好,感谢您的回答,但不幸的是它不起作用。正如我所指出的,我已经更正了我的代码,但不幸的是,该值始终为零。我也在 iPhone 的模拟器上启动了该应用程序,但不幸的是没有,它不起作用。
  • 你好,我在互联网上做了一些研究,在这个链接中,用户遇到了和我一样的问题。 stackoverflow.com/questions/39808319/…应该是苹果手表模拟器的问题。现在我该如何解决,以便我可以尝试测试我的应用程序?我只剩下一个,然后我可以发布。谢谢,文森佐
【解决方案2】:

试试这个:

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

访问商店:

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

我承认我之前没有尝试过init()我自己的UserDefaults实例,但是它的标准实例,被iOS做成单例,是一个很好的使用习惯。

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

【讨论】:

  • 嗨,我按照你的指示试过了,但不幸的是它总是为零
  • 抱歉!阅读本文了解更多信息:stackoverflow.com/questions/27025526/…
  • 你好,我在互联网上做了一些研究,在这个链接中,用户遇到了和我一样的问题。 stackoverflow.com/questions/39808319/…应该是苹果手表模拟器的问题。现在我该如何解决,以便我可以尝试测试我的应用程序?我只剩下一个,然后我可以发布。谢谢,文森佐
【解决方案3】:

设置:

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

访问:

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

【讨论】:

  • 您好,我尝试按照我的指示进行操作,但不幸的是它不起作用。在这一点上我认为模拟器有问题,因为我不知道还能想什么。我会给朋友试戴 Apple Watch,看看是否是问题所在。感谢您的到来。文森佐
  • 你好,我在互联网上做了一些研究,在这个链接中,用户遇到了和我一样的问题。 stackoverflow.com/questions/39808319/…应该是苹果手表模拟器的问题。现在我该如何解决,以便我可以尝试测试我的应用程序?我只剩下一个,然后我可以发布。谢谢,文森佐
  • 你好,我在互联网上做了一些研究,在这个链接中,用户遇到了和我一样的问题。 stackoverflow.com/questions/39808319/…应该是苹果手表模拟器的问题。现在我该如何解决,以便我可以尝试测试我的应用程序?我只剩下一个,然后我可以发布。谢谢,文森佐
猜你喜欢
  • 2015-03-05
  • 2014-08-25
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多