如何将两个 UITextView 中的数据保存到 UserDefaults
Posted
技术标签:
【中文标题】如何将两个 UITextView 中的数据保存到 UserDefaults【英文标题】:How to save data from two UITextViews to UserDefaults 【发布时间】:2019-11-06 05:51:06 【问题描述】:对于每个使用UserDefaults
的UITextView
,我都创建了一个保存函数和一个显示函数。
无论添加什么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()
【问题讨论】:
不相关但 UserDefaults 中有string(forKey:
@Superlative 请检查简单的解决方案:***.com/a/58724094/6197968
您说“我安装的应用程序添加了两个功能它不起作用”您所说的不起作用是什么意思?它不会给出任何价值还是给出旧值?
textView 中没有显示任何内容
全新安装后或第二次将值保存到 UserDefault 后不会显示?
【参考方案1】:
这取决于您调用save
和display
方法的顺序和时间。
当您安装新的应用程序时,UserDefaults
中不会保存任何数据。因此,当您在 viewWillAppear(_:)
中调用 displaySavedHistory()
和 displaySavedFrequency()
方法时,将不会获取任何内容,因为尚未保存任何内容。
现在,当您使用viewWillDisappear(_:)
中的saveHistoryTextView()
和saveFrequencyTextView()
方法保存数据,然后您杀死并再次运行应用程序时,将获取并显示保存的数据。
另外,由于您将数据保存在UserDefaults
中,而UserDefaults
保存在sandbox
中,因此当您删除应用程序时数据不会保留。如果您想在删除应用后仍保留数据,则必须将数据保存在 iCloud
或 keychain
等中。
【讨论】:
当显示方法存在时,保存的数据不会被获取和显示。需要删除显示方法,然后在没有它们的情况下重新启动应用程序。然后需要再次添加它们,然后当应用再次启动时一切正常。【参考方案2】:一旦我以正确的频率将大脑置于 theta 状态,我就设法弄清楚了。
感谢@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()
【讨论】:
【参考方案3】:您可以使用属性观察器来做到这一点:
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
【讨论】:
无法让它工作,它一直以这种方式崩溃。也感谢降价:)以上是关于如何将两个 UITextView 中的数据保存到 UserDefaults的主要内容,如果未能解决你的问题,请参考以下文章
将 UITextView 中的文本保存到 NSUserDefaults 中的方式与将 UITextFIeld 保存在 Notes 应用程序中的方式相同
如何将菜单选项添加到 NSTextAttachment 弹出菜单是 UITextView?
将文本从 UITextView 保存到领域(Swift 5)时出现问题