Ios 如何将两个UITextView中的数据保存到UserDefault
对于每个使用UserDefaults的UITextView,我都创建了一个保存函数和一个显示函数 无论添加什么文本,都需要在添加时显示、保存,然后在再次打开应用程序时再次显示 如果我只安装了要保存的功能的应用程序,请退出应用程序并添加要显示的功能,然后在不删除已安装应用程序的情况下重新安装,一切都会正常工作Ios 如何将两个UITextView中的数据保存到UserDefault,ios,swift,uitextview,userdefaults,Ios,Swift,Uitextview,Userdefaults,对于每个使用UserDefaults的UITextView,我都创建了一个保存函数和一个显示函数 无论添加什么文本,都需要在添加时显示、保存,然后在再次打开应用程序时再次显示 如果我只安装了要保存的功能的应用程序,请退出应用程序并添加要显示的功能,然后在不删除已安装应用程序的情况下重新安装,一切都会正常工作 func saveHistoryTextView() { if numberHistoryView.text?.count != nil { let defa
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后第二次显示时,不会显示任何内容。当显示方法存在时,保存的数据不会被提取和显示。需要删除显示方法,然后在没有显示方法的情况下重新启动应用程序。然后它们需要重新添加,然后当应用程序再次启动时,一切都很完美。无法让它工作,只是一直以这种方式崩溃。也谢谢你的降价: