【问题标题】:Saving to User Defaults in Swift在 Swift 中保存到用户默认值
【发布时间】:2015-03-24 16:24:30
【问题描述】:

我目前正在尝试将数组保存为用户默认值。

这是我的代码:

//where things will be stored
let defaults = NSUserDefaults.standardUserDefaults()
var taskNames = [String]()
var taskPriorities = [Float]()

//this is the function that saves tasks
func saveTask() {
    println(taskNames)
    println(taskPriorities)
    defaults.setObject(taskNames, forKey: "taskName")
    defaults.setObject(taskPriorities, forKey: "taskPriorities")
    defaults.synchronize()
}

//this is the function that loads tasks
func loadTasks() {
    var taskNamesLoad = defaults.dataForKey("taskName")

    println(defaults.dataForKey("taskName"))
    println(taskNamesLoad)
}

当我调用函数加载数据时(当然是在使用其他函数保存一些数据之后),控制台的输出为 nil,并且用户默认值中没有保存数据。我该如何解决这个问题?

【问题讨论】:

  • 你传递了什么值?
  • 我将 taskNames 和 taskProperties 数组传递给用户默认值。这些值来自 UITextFeild 和 UISlider

标签: ios arrays swift nsuserdefaults


【解决方案1】:

您应该使用arrayForKeyobjectForKey 而不是dataForKey。因为您存储的是Array 对象,而不是NSData

如下:

func loadTasks() {
    var taskNamesLoad = defaults.arrayForKey("taskName")

    println(defaults.arrayForKey("taskName"))
    println(taskNamesLoad)
}

【讨论】:

  • defaults.stringArrayForKey("taskName") as [String]
【解决方案2】:

如果您要保存到用户默认值,您需要使用 plist 安全对象。因此,您需要使用NSNumber,而不是使用Float

【讨论】:

  • 有没有办法将字符串数组保存为用户默认值?
  • @StewartHering 我会想象你所拥有的会起作用。如果没有,请尝试使用NSString
猜你喜欢
  • 2017-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
  • 2019-07-25
  • 2018-01-09
  • 1970-01-01
相关资源
最近更新 更多