我正在快速制作应用程序3 我有一个TableViewController,当我点击一行时,它会打开一个ViewController,其中有一个TextView。当我点击它时,我可以编辑它,但更改不会“保存”。当我回到我的列表并重新点击同一行时,文本又回到了“默认”,我整天都遇到这个问题,我不知道如何解决它,我试过了来自stackoverflow的解决方案,但只提供更改文本颜色的解决方案。 那我该怎么办呢?
答案 0 :(得分:0)
根据您到目前为止所说的内容,我只能假设您没有存储已输入UITextView的新文本。
未保存更改的原因是每次通过点击TableViewCell“打开”新的ViewController时,它都是该ViewController的全新实例。这意味着它没有输入到TextView中应该显示的内容,因此显示默认文本。
但我该如何解决?
这将要求您每次离开或关闭ViewController时都保存TextView的文本。这是因为当您离开ViewController时,它将从内存中释放。 这意味着在那里写的任何内容都不再存在。我建议将文本存储在TableViewController的字符串数组中,这应该允许文本在应用程序的生命周期内持续存在。
关闭应用时文字消失了!
这需要数据持久性,为此我建议您阅读如何使用Core Data在多个应用生命周期内存储和保存数据。
答案 1 :(得分:0)
有很多方法可以实现这一点,我们的想法是在视图控制器的初始化中设置文本视图的文本。
因此,您需要一个位置来保存用户输入的数据,然后在视图控制器的初始化中再次读取该数据。
一种方法是使用单例类来保存数据,例如:
class SharedData {
static let instance = SharedData()
var textEnteredByUser: String?
}
现在,当用户输入文本时,将该文本保存在“SharedData”中的字符串中,如下所示:
SharedData.instance.textEnteredByUser = textView.text!
现在,我们已经保存了用户输入的数据,我们需要在文本视图中显示数据然后才能在屏幕上显示,这可以通过视图控制器的viewDidLoad
方法实现这样的:
override func viewDidLoad() {
super.viewDidLoad()
textView.text = SharedData.instance.textEnteredByUser
}
您还可以将数据保存为用户默认值而不是单身类,如下所示:
UserDefaults.standard.set(textView.text!, forKey: "textEnteredByUser")
然后以这种方式检索保存的文本:
UserDefaults.standard.string(forKey: "textEnteredByUser")
注意:单例解决方案保持不同视图控制器之间共享数据,但在关闭应用程序后不会保留数据,这就是用户默认操作。