ios - 切换视图后数据丢失
问题描述
在 Screen AI 中,从用户那里收集数据,然后使用 prepare for segue 功能将其显示在 Screen B 上。然后我注意到如果用户转到屏幕 C,然后返回屏幕 B,数据就消失了。我如何将数据保存在那里。
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var textInput: UITextField!
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let a : BViewController = segue.destination as! BViewController
a.honey = textInput.text!
}
}
import UIKit
class BViewController: UIViewController {
@IBOutlet weak var x: UILabel!
var honey:String = "default"
override func viewDidLoad() {
super.viewDidLoad()
x.text = honey
}
}
解决方案
然后我注意到如果用户转到屏幕 C,然后返回屏幕 B,数据就消失了。我如何将数据保存在那里。
我看到两个问题:
看起来您实际上并没有回到您离开的“屏幕 B”。情节提要显示了从 B 到 C 的推送序列,以及从 C 到 B 的另一个推送序列。所以我认为正在发生的事情是您正在创建另一个屏幕 B,与第一个屏幕分开。您应该考虑展开 push segue而不是添加另一个。请记住:您在情节提要中创建的屏幕不是单独的对象——它们更像是对象的模式或原型,并且可以多次实例化。
更一般地说,避免将程序的数据存储在视图甚至视图控制器中是一个好主意。MVC 中的M代表model,它是一个单独的对象(或一组对象),用于管理应用程序的数据和业务逻辑。使用模型不能解决问题 #1,但它仍然可以帮助您避免很多“嘿,我的数据去哪儿了?” 问题。
推荐阅读
- java - 构建和运行底部导航活动时出现空指针异常
- assembly - ARM AS 汇编程序 read() 在 printf() 之前运行,但 printf() 是前面的语句
- python-3.x - SSL: CERTIFICATE_VERIFY_FAILED” 错误 --> EVEN 安装后
- fortran - 如何将 Fortran MAX(0D0, X) 转换为另一种语言
- ios - Swift - 带有嵌入式 UIStackView 的 UIScrollView 的无限滚动
- typescript - 元组镇的打字稿麻烦:保留参数类型
- c# - 在屏幕上滑动以在游戏中滑动
- python - 在python中使用for循环或嵌套循环创建多个附加数组的数据框
- reactjs - 我该如何解决这个 try catch 问题
- html - 将 CSS 规则应用于一个工具提示?