ios - 写入领域(成功),继续到 NextVC(成功)并显示保存到领域的先前 VC 的字符串数据(需要帮助)
问题描述
我有一个saveTapped
在FirstVC
. 当点击它时,我有许多字符串数据被成功写入领域数据库。
我正在尝试
- 获取将
saveTapped
数据保存/写入领域的按钮(这是有效的) - 将数据写入领域后,转至
NextVC
视图控制器(这是有效的,带有saveTappedSegue
直接来自 的标识符的转接FirstVC
)
到那时
- 显示刚刚保存到 Realm 数据库中的信息
NextVC
。
我有以下代码布局;
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "saveTappedSegue" {
let dest = segue.destination as! NextVC
dest.NextVCLabel1.text = UITextField1.text // Errors thrown here
dest.NextVCLabel2.text = UITextField2.text etc.etc.
}
}
@IBAction func saveTapped(_ sender: Any) {
let realm = try! Realm()
var realmClassName = RealmClassToInheritFrom()
realmClassName.classProperty1 = UITextField1.text
realmClassName.classProperty2 = UITextField2.text
realmClassName.classProperty3 = UITextField3.text etc. etc.
try! realm.write {
realm.add(realmClassName)
}
self.performSegue(withIdentifier: "saveTappedSegue", sender: self)
}
错误是"Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value"
我的第 1 步和第 2 步工作成功。
我希望将刚刚保存到领域的信息显示在NextVC
以下标签上;
NextVCLabel1
NextVCLabel2
NextVCLabel3 etc etc.
我目前正在查看第三步并删除错误以允许 UITextFields 显示在 NextVC 标签上。我在某处读过我可能需要时间戳的地方,或者ID
在保存数据以使其易于访问时给予数据?我只是想出了如何保存到领域,所以这是我第一次尝试从领域读取数据以显示。
解决方案
你有几种方法可以做到这一点。您可以在 prepareForSegue 内执行所有逻辑,或者在 saveTapped 内执行一些逻辑,在 prepareForSegue 内执行一些逻辑。例如,第一种方法如下所示:
- 您的 saveTapped 函数只有一个语句 - performSegue。
@objc func saveTapped(_ sender: UIBarButtonItem) {
self.performSegue(withIdentifier: "saveTappedSegue", sender: self)
}
- 在 NextVC 中,为每个标签声明一个变量,并在 viewDidLoad 上将每个变量的值分配给其对应的标签:
class NextVC: UIViewController {
// Labels
@IBOutlet weak var label1: UILabel!
@IBOutlet weak var label2: UILabel!
// String variables
var string1 = ""
var string2 = ""
override func viewDidLoad() {
super.viewDidLoad()
// Assign each string variable's content to its corresponding label
label1.text = string1
label2.text = string2
}
}
- 在 FirstVC 内部,让我们处理需要在 prepareForSegue 内部实现的逻辑:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "NEXTVC_SEGUE_ID" {
let destination = segue.destination as! NextViewController
// Let's write to realm first
let realm = try! Realm()
var realmClassName = RealmClassToInheritFrom()
realmClassName.classProperty1 = UITextField1.text
realmClassName.classProperty2 = UITextField2.text
realmClassName.classProperty3 = UITextField3.text etc. etc.
try! realm.write {
realm.add(realmClassName)
}
// Now let's set the NextVC's string variables
destination.string1 = UITextField1.text
destination.string2= UITextField2.text
}
}
另一种方法是传入对象。