【问题标题】:No data being passed through NSUserDefaults没有数据通过 NSUserDefaults 传递
【发布时间】:2014-08-29 01:29:42
【问题描述】:

我遇到了一个奇怪的 NSUserDefaults 问题。我只是想保存一个字符串,但它一直返回空白。

当我关闭应用程序并重新打开它并从 NSUserDefaults 加载字符串时,无论我输入了什么,它都不会在我使用的标签中显示任何内容。我知道字符串在通过 NSUserDefaults 之前包含正确的数据,因为我尝试将其放入 println。

这是我与字符串相关的代码:

    formattedNumberTotal = formatter.stringFromNumber(currencyDouble)
    println(formattedNumberTotal)
    NSUserDefaults.standardUserDefaults().setObject(formattedNumberTotal, forKey: "userInitialBudget")

override func viewWillAppear(animated: Bool) {
        totalBudgetDisplay.text = NSUserDefaults.standardUserDefaults().stringForKey("userInitialBudget")
}

我还有其他变量,我以完全相同的方式处理它们,它们工作得非常好。所以我看不出问题出在哪里。

【问题讨论】:

  • formattedNumberTotal的类型是什么? NSUserDefaults 仅适用于有限数量的类型:NSDataNSStringNSNumberNSDateNSArrayNSDictionary 以及这些类型的组合。不允许使用 Swift StringArrayDictionary。请注意,这是一个非常受欢迎的问题,稍加搜索就会提供答案。
  • 感谢您的回复。这是一个字符串,所以我看不出它为什么不起作用。是的,我应该在问之前快速搜索一下。
  • 啊!我不知道不允许使用 Swift 字符串。那我试试 NSString 吧。
  • 您也可以考虑向 Apple 提交错误报告,请求 Swift 数据类型支持。尽管NSUserDefaults 的大部分用法应该是使用另一种方法,但它不是数据库或一般的持久存储。
  • 非常感谢!将其更改为 NSString 解决了该问题。是的,我已经读过 Core Data 或 NSCoding 等......是保存数据的正确方法,但由于我是 Swift/Xcode 的新手,所以我想为我的第一个测试应用程序保持简单。

标签: swift nsuserdefaults


【解决方案1】:

如果您使用setObject() 保存String,那么当您检索它时使用objectForKey()。 我能够将SwiftString 保存在NSUserDefaults

使用 Xcode6 beta6 可以正常工作:

func saveValue(value: AnyObject, forKey: String) {
    NSUserDefaults.standardUserDefaults().setObject(value, forKey: forKey);
}

func getValue(#key: String) -> AnyObject? {
    return NSUserDefaults.standardUserDefaults().objectForKey(key);
}

【讨论】:

  • 你需要synchronisesaveValue方法中的userDefaults吗?
  • 没有。但如果有必要,你可以这样做。
猜你喜欢
  • 2018-01-24
  • 2011-05-30
  • 1970-01-01
  • 1970-01-01
  • 2021-09-30
  • 2014-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多