Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何将两个UITextView中的数据保存到UserDefault_Ios_Swift_Uitextview_Userdefaults - Fatal编程技术网

Ios 如何将两个UITextView中的数据保存到UserDefault

Ios 如何将两个UITextView中的数据保存到UserDefault,ios,swift,uitextview,userdefaults,Ios,Swift,Uitextview,Userdefaults,对于每个使用UserDefaults的UITextView,我都创建了一个保存函数和一个显示函数 无论添加什么文本,都需要在添加时显示、保存,然后在再次打开应用程序时再次显示 如果我只安装了要保存的功能的应用程序,请退出应用程序并添加要显示的功能,然后在不删除已安装应用程序的情况下重新安装,一切都会正常工作 func saveHistoryTextView() { if numberHistoryView.text?.count != nil { let defa

对于每个使用UserDefaults的UITextView,我都创建了一个保存函数和一个显示函数

无论添加什么文本,都需要在添加时显示、保存,然后在再次打开应用程序时再次显示

如果我只安装了要保存的功能的应用程序,请退出应用程序并添加要显示的功能,然后在不删除已安装应用程序的情况下重新安装,一切都会正常工作

func saveHistoryTextView()
{
    if numberHistoryView.text?.count != nil
    {
        let defaults = UserDefaults.standard
        defaults.set(numberHistoryView.text!, forKey: "combos")
    }
}
func displaySavedHistory()
{
    let defaults = UserDefaults.standard
    if let savedCombos = defaults.string(forKey: "combos")
    {
        numberHistoryView.text = savedCombos
    }
}

func saveFrequencyTextView()
{
    if numberFrequencyCount.text?.count != nil
    {
        let defaults = UserDefaults.standard
        defaults.set(numberFrequencyCount.text!, forKey: "frequency")
    }
}
func displaySavedFrequency()
{
    let defaults = UserDefaults.standard
    if let savedFrequency = defaults.string(forKey: "frequency")
    {
        numberFrequencyCount.text = savedFrequency
    }
  }
}


override func viewWillDisappear(_ animated: Bool)
{
    saveHistoryTextView()
    saveFrequencyTextView()
}
override func viewWillAppear(_ animated: Bool)
{
    displaySavedHistory()
    displaySavedFrequency()
}
如果我安装的应用程序同时添加了这两个功能,那么它将无法工作

必须有一个简单的解决办法,我显然做错了什么

来自一个textView的数据用于计算结果,然后在另一个textView上显示结果。 所有数据都与其他函数一起添加,用户没有添加任何函数

    numberHistoryView.isEditable = false
    numberHistoryView.isSelectable = false

func saveHistoryTextView()
{
    let defaults = UserDefaults.standard
    let numberHistory = numberHistoryView.text
    defaults.set(numberHistory, forKey: "combos")
}
func displaySavedHistory()
{
    let defaults = UserDefaults.standard
    let savedCombos = defaults.object(forKey: "combos") as? String ?? ""
    numberHistoryView.text = savedCombos
}

func saveFrequencyTextView()
{
    let defaults = UserDefaults.standard
    let numberFrequency = numberFrequencyCount.text
    defaults.set(numberFrequency, forKey: "frequency")
}
func displaySavedFrequency()
{
    let defaults = UserDefaults.standard
    let savedFrequency = defaults.object(forKey: "frequency") as? String ?? ""
    numberFrequencyCount.text = savedFrequency
}


override func viewWillDisappear(_ animated: Bool)
{
    saveHistoryTextView()
    saveFrequencyTextView()
}
override func viewWillAppear(_ animated: Bool)
{
    displaySavedHistory()
    displaySavedFrequency()
}
这取决于调用save和display方法的顺序和时间

当你安装一个新的应用程序时,在UserDefaults中不会保存任何数据。因此,当您在VIEW中调用displaySavedHistory和displaySavedFrequency方法时,不会获取任何内容,因为尚未保存任何内容

现在,当您使用VIEW中的saveHistoryTextView和saveFrequencyTextView方法保存数据时,将消失,然后您再次终止并运行应用程序,保存的数据将被提取并显示


此外,由于您将数据保存在UserDefaults中,并且UserDefaults保存在沙盒中,因此删除应用程序时数据不会持久。您必须将数据保存在iCloud或keychain等中。如果您想在删除应用程序后仍保留数据。

您可以使用property observer作为:

private let DATA_KEY = "Saved Data"

//After initialising the outlet we can set the data
@IBOutlet weak var textView: UITextView! {
    didSet {
        textView.text = self.data
    }
}

private var data: String {
    set {
        //Save data in user defaults
        UserDefaults.standard.set("The value you will assign", forKey: DATA_KEY)
    }
    get {
        //get the data from user defaults.
        return UserDefaults.standard.value(forKey: DATA_KEY) as? String ?? ""
    }
}

//UITextViewDelegate: set the text data on end of UITextView editing
func textViewDidEndEditing(_ textView: UITextView) {
    self.data = textView.text
}

一旦我以正确的频率将大脑置于θ状态,我就设法找到了答案

感谢@Naresh和所有其他贡献者的帮助,因为你可能已经帮了我一点

解决方案基本上只需要一个简单的if语句

现在一切都很好

func saveHistoryTextView()
{
    if numberHistoryView.text?.count != nil
    {
        let defaults = UserDefaults.standard
        defaults.set(numberHistoryView.text!, forKey: "combos")
    }
}
func displaySavedHistory()
{
    let defaults = UserDefaults.standard
    if let savedCombos = defaults.string(forKey: "combos")
    {
        numberHistoryView.text = savedCombos
    }
}

func saveFrequencyTextView()
{
    if numberFrequencyCount.text?.count != nil
    {
        let defaults = UserDefaults.standard
        defaults.set(numberFrequencyCount.text!, forKey: "frequency")
    }
}
func displaySavedFrequency()
{
    let defaults = UserDefaults.standard
    if let savedFrequency = defaults.string(forKey: "frequency")
    {
        numberFrequencyCount.text = savedFrequency
    }
  }
}


override func viewWillDisappear(_ animated: Bool)
{
    saveHistoryTextView()
    saveFrequencyTextView()
}
override func viewWillAppear(_ animated: Bool)
{
    displaySavedHistory()
    displaySavedFrequency()
}

不相关但有stringforKey:在UserDefaults@Superlative请检查一下简单的解决方案:你说我安装的应用程序同时添加了两个功能。它不工作。你说不工作是什么意思?它不会给出任何值或它给出的是旧值?文本视图中不会显示任何内容。在非常新的安装后或将值保存到UserDefault后第二次显示时,不会显示任何内容。当显示方法存在时,保存的数据不会被提取和显示。需要删除显示方法,然后在没有显示方法的情况下重新启动应用程序。然后它们需要重新添加,然后当应用程序再次启动时,一切都很完美。无法让它工作,只是一直以这种方式崩溃。也谢谢你的降价: