Мне нужна помощь в сохранении данных из двух UITextViews в UserDefaults - PullRequest
0 голосов
/ 06 ноября 2019

Для каждого UITextView, использующего UserDefaults, я создал функцию для сохранения и функцию для отображения.

Все, что добавлено text, должно отображаться во время добавления, сохранятьсяи затем снова отображается при повторном открытии приложения.

Если я установлю приложение ТОЛЬКО с функцией сохранения, выйду из приложения и добавлю функцию отображения, затем переустановлю, не удаляя установленное приложение, все работает отлично.

Если я устанавливаю приложение с обеими добавленными функциями, оно не работает.

Для этого должно быть простое решение, очевидно, я что-то делаю не так.

данные из одного 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()
}

Ответы [ 3 ]

0 голосов
/ 06 ноября 2019

Вы можете сделать это с помощью свойства обозревателя как:

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
}
0 голосов
/ 07 ноября 2019

Как только я поместил свой мозг в тета-состояние с правильной частотой, мне удалось это понять.

Спасибо @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()
}
0 голосов
/ 06 ноября 2019

Это зависит от порядка и времени , в котором вы вызываете методы save и display.

  1. При установке нового приложения данные не будут сохранены в UserDefaults. Поэтому, когда вы вызываете displaySavedHistory() и displaySavedFrequency() методы в viewWillAppear(_:), ничего не будет выбрано, потому что ничего еще не сохранено.

  2. Теперь, когда вы сохраняете данные, используя saveHistoryTextView()и saveFrequencyTextView() методов в viewWillDisappear(_:), а затем вы снова убьете и запустите приложение, сохраненные данные будут извлечены и отображены.

Кроме того, поскольку вы сохраняете данные вUserDefaults и UserDefaults сохраняются в sandbox, поэтому данные не будут сохраняться при удалении приложения. Вы должны сохранить данные в iCloud или keychain и т. Д., Если хотите сохранить данные даже после удаления приложения.

...