永久存储阵列的麻烦

时间:2016-06-25 14:02:57

标签: ios swift nsuserdefaults

我正在尝试在iOS的基本核对表应用程序中将用户永久存储在数组中(将要添加到核对表的任务输入到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)

}

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

例如,如果我输入:"完成菜肴"在文本字段中,打印到控制台的数组将包含文本。但是当我重新启动程序时,数组是空的。

我对NSUserdefaults的了解有限,因为我大多数时候仍然是初学者,因此我的逻辑很可能只是不正确。如果你知道更好的存储物品的方法或能够纠正我,我将不胜感激。在此先感谢:)

1 个答案:

答案 0 :(得分:3)

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

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

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

这会将NSUserDefaults中之前存储的值加载到list属性中,或者如果NSUserDefaults中没有存储此类列表,则将其初始化为空数组。