【问题标题】:Swift UserDefaults returns nilSwift UserDefaults 返回 nil
【发布时间】:2018-01-29 06:48:29
【问题描述】:

尝试学习做todolist;我有两个视图控制器,一个用于存储,一个用于在表格视图中显示。我的桌子返回零;我哪里错了?

存储视图:

    var toDoStorage = UserDefaults.standard.object(forKey: "toDo")
    var toDoList = [String] ()

@IBAction func saveButton(_ sender: Any) {
    if (toDoStorage as? [String]) != nil {
        toDoList.append(itemLabel.text!)
    } else {
        toDoList = [itemLabel.text!]
    }
    UserDefaults.standard.set(toDoList, forKey: "todo")
    itemLabel.text = ""
}

显示视图:

    var toDo = [UserDefaults.standard.object(forKey: "toDo")]

public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
    return toDo.count
}

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "IDCell")
    cell.textLabel?.text = String(describing: toDo[indexPath.row])
    return cell
}

【问题讨论】:

    标签: arrays swift uitableview nsuserdefaults


    【解决方案1】:

    只要用它来存储字符串数组

    var toDo = UserDefaults.standard.stringArray(forKey: "todo") ?? [String]()
    

    【讨论】:

    • 成功了!我必须使用 stringArray 因为数据已经是一个数组吗?
    • 不,你可以使用 Object 但最好说数组字符串
    • 我尝试用 object 替换 stringArray 但之后出现错误;该变量未被识别为数组,因此我无法使用 count 和 indexpath.row
    • UserDefaults.standard.object(forKey: "todo") ?? [字符串]()
    • 抱歉你需要使用 let myarray = UserDefaults.standard.array(forKey: "todo") ?? [字符串]()
    【解决方案2】:

    确保您的密钥匹配.. 您的键输入有误.. "todo" != "toDo"

    【讨论】:

    • 谢谢我没看到
    • 这是我确定的答案的一部分,但如果我只纠正错字,我的表格中出现显示错误,上述解决方案有效
    猜你喜欢
    • 2017-02-10
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    相关资源
    最近更新 更多