【问题标题】:Add and save UItextField input to array将 UItextField 输入添加并保存到数组
【发布时间】:2017-12-25 09:34:25
【问题描述】:

我有一个接受用户输入的 UIAlertController。我想将用户输入的文本添加到数组中,并将该数组保存在用户默认值中。问题是,新输入的文本不断替换以前输入的文本。所以我认为它没有保存在数组中。

这是我迄今为止尝试过的:

func presentAlert() {
    let confirmAction = UIAlertAction(title: "Save", style: .default) { (_) in
        if let field = alertController.textFields {
             // This is how I tried to create the array to hold input text
            let textFieldArray = field as [UITextField]
            let text = textFieldArray[0].text

            var myArray = [""]
            myArray.append(String(describing: text!))
            UserDefaults.standard.set(myArray, forKey: "Gratitude")
            UserDefaults.standard.synchronize()

            print(myArray)

        } else {
            print()
        }
    }

    let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { (_) in }

    alertController.addTextField { (textField) in

        //textField.placeholder = ""
    }

    alertController.addAction(confirmAction)
    alertController.addAction(cancelAction)

    self.present(alertController, animated: true, completion: nil)
}

【问题讨论】:

  • 你每次写一个字符串的数组。这取代了以前可能存在的任何东西。

标签: ios arrays swift uitextfield nsuserdefaults


【解决方案1】:

这里的错误是,创建一个全新的数组,附加一个值,然后将其写入“Gratitude”键下的UserDefaults,将总是覆盖那里的所有内容并将其替换为您的单个元素数组。如果您想在UserDefaults 中的存储数组中动态添加其他元素,您必须先访问它:

var myArray = UserDefaults.standard.array(forKey: "Gratitude") ?? []
myArray.append(String(describing: text!))
UserDefaults.standard.set(myArray, forKey: "Gratitude")

print(myArray)

我还建议将您的密钥存储在一个常量中,这样您就可以确保每次请求对象时都访问正确的值:

let myArrayKey = "Gratitude"

var myArray = UserDefaults.standard.array(forKey: myArrayKey) ?? []
myArray.append(String(describing: text!))
UserDefaults.standard.set(myArray, forKey: myArrayKey)

print(myArray)

让我知道这是否有意义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多