永久存储数组的问题
Trouble with storing an array permanently
我正在尝试在我的基本清单应用程序中为用户永久存储任务 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)
}
然而,当存储的数组打印到控制台时,它只包含从 运行 程序的那个实例输入的任务。
例如,如果我在文本字段中输入:"Finish the dishes",打印到控制台的数组将包含文本。但是,当我重新启动程序时,数组为空。
我对 NSUserdefaults 的了解有限,因为我大部分时间还是初学者,因此我的逻辑很可能是不正确的。如果您知道存储对象的更好方法或能够纠正我,我将不胜感激。提前致谢:)
您的问题是您没有在应用程序启动时将存储的列表数据加载到 list
。然后,当调用 addItemPressed
时,将项目存储到空的 list
中,然后覆盖存储在 NSUserDefaults
.
中的任何内容
您需要在应用启动时加载存储的数据。你可以这样做 viewDidLoad
:
list = NSUserDefaults.standardUserDefaults().objectForKey("list") as? [String] ?? []
这会将先前存储在 NSUserDefaults
中的值加载到您的 list
属性 中,或者如果 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)
}
然而,当存储的数组打印到控制台时,它只包含从 运行 程序的那个实例输入的任务。
例如,如果我在文本字段中输入:"Finish the dishes",打印到控制台的数组将包含文本。但是,当我重新启动程序时,数组为空。
我对 NSUserdefaults 的了解有限,因为我大部分时间还是初学者,因此我的逻辑很可能是不正确的。如果您知道存储对象的更好方法或能够纠正我,我将不胜感激。提前致谢:)
您的问题是您没有在应用程序启动时将存储的列表数据加载到 list
。然后,当调用 addItemPressed
时,将项目存储到空的 list
中,然后覆盖存储在 NSUserDefaults
.
您需要在应用启动时加载存储的数据。你可以这样做 viewDidLoad
:
list = NSUserDefaults.standardUserDefaults().objectForKey("list") as? [String] ?? []
这会将先前存储在 NSUserDefaults
中的值加载到您的 list
属性 中,或者如果 NSUserDefaults
中没有存储这样的列表,则将其初始化为空数组.