ios - 永久存储数组的问题

标签 ios swift nsuserdefaults

我正在尝试在我的 iOS 基本 list 应用程序中为用户永久存储任务(要添加到 list 的任务输入到 UITextField 中),如下所示:

var list: [String] = [String]()

@IBOutlet weak var itemField: UITextField!

@IBAction func addItemPressed(sender: AnyObject) {

    let task: String? = itemField.text

    list?.append(task!)

    itemField.text = nil

    NSUserDefaults.standardUserDefaults().setObject(list, forKey: "list")

    let storedList = NSUserDefaults.standardUserDefaults().objectForKey("list")! as! NSArray

    print(storedList)

}

然而,当存储的数组打印到控制台时,它只包含从运行程序的那个实例输入的任务。

例如,如果我在文本字段中输入:“Finish the dishes”,打印到控制台的数组将包含该文本。但是,当我重新启动程序时,数组为空。

我对 NSUserdefaults 的了解有限,因为我大部分时间还是初学者,因此我的逻辑很可能是不正确的。如果您知道存储对象的更好方法或能够纠正我,我将不胜感激。提前致谢:)

最佳答案

您的问题是您没有在应用程序启动时将存储的列表数据加载到 list 中。然后,当 addItemPressed 被调用时,您将项目存储到空的 list 中,然后覆盖存储在 NSUserDefaults 中的任何内容。

您需要在应用程序启动时加载存储的数据。你可以这样做是viewDidLoad:

list = NSUserDefaults.standardUserDefaults().objectForKey("list") as? [String] ?? []

这会将先前存储在 NSUserDefaults 中的值加载到您的 list 属性中,或者如果 NSUserDefaults< 中没有存储这样的列表,则将其初始化为空数组.

关于ios - 永久存储数组的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38029316/

相关文章:

ios - 为什么在子类中看不到继承的实例变量?

ios - 在不剪切内容的情况下减小 UIView 的大小

swift - React Native 在 Swift 中向 JavaScript 发送事件

ios - 无法将类型 'FriendTableViewCell.Type' 的值转换为预期的参数类型 'FriendTableViewCell'

swift - 如何在 Swift 中将 NSUserDefault 与 PickerView 一起使用?

ios - 保存和读取图像阵列

ios - 核心数据 - NSFetchedResultController 按其他表字段对数据进行排序

iphone - 在 View 中添加多个标签

android - 如何在 Android 中实现 NSUserDefaults 概念

android - 为 QuickBlox 开发 Flutter 插件与使用 native 插件开发 native 应用程序