2016-06-25 86 views
0

我试图储存任务的阵列永久性地为用户在我的基本清单应用程式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的知识有限,因为我大多还是初学者,所以我的逻辑很可能只是不正确。如果您知道存储对象的更好方法或能够纠正我,我将不胜感激。在此先感谢:)

+0

你是什么意思把它存储到列表中?如果'storedList'在启动时没有包含这些值,那么我无法将它添加到'list',虽然正确? –

回答

3

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

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

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

这将NSUserDefaults以前存储的值加载到您的list财产或者如果存储在NSUserDefaults没有这样的列表将其初始化为空数组。