gpt4 book ai didi

ios - 当我返回 ViewController 时如何在 ViewController 中存储数据

转载 作者:行者123 更新时间:2023-11-28 06:14:49 25 4
gpt4 key购买 nike

当我将它留给另一个 ViewController(A 或 C)时,我试图将存储数据保留在我的 ViewControllerB 中。

我不想在移动时在每个 ViewController 中传递数据,但我只想将它们存储在我的 ViewControllerB 中。

我可以为此做一个协议(protocol)委托(delegate),但我认为可能有更好的方法。

我的 ViewController 中有这个:

var contacts: [[String : String]] = [[:]]

我想保留这些存储在我的词典中的数据。

我这样做是为了初始化我的词典。

override func viewDidLoad() {
contacts[0] = ["Name": "Me", "Number": "Hihi I'm not going to show my phone number here"]
contactsTableView.tableFooterView = UIView()
}

当我继续 ViewControllerC 然后返回到 VCB 时,它正在工作,我的字典保留值,但是当我转到 ViewControllerA 然后返回 B 时,我的字典是空的。

为了离开 ViewControllerC 并回到 B 我正在使用这种方法

@IBAction func cancelButtonPressed(_ sender: Any) {
navigationController?.popViewController(animated: true)
dismiss(animated: true, completion: nil)
}

编辑:所有导航代码:

ViewControllerA 到 B:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showContacts" {
let vc = segue.destination as! ContactsViewController
}
}

@IBAction func contactsButtonPressed(_ sender: Any) {
self.performSegue(withIdentifier: "showContacts", sender: (Any).self)
}

ViewController B 到 A:

 @IBAction func saveButtonPressed(_ sender: Any) {
navigationController?.popViewController(animated: true)
dismiss(animated: true, completion: nil)
}

ViewController B 到 C:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showCreate" {
let vc = segue.destination as! CreateViewController
vc.delegate = self
}
}

@IBAction func addButtonPressed(_ sender: Any) {
performSegue(withIdentifier: "showCreate", sender: Any?.self)
}

和 ViewController C 到 B:

@IBAction func cancelButtonPressed(_ sender: Any) {
navigationController?.popViewController(animated: true)
dismiss(animated: true, completion: nil)
}

我曾尝试使用它来将 B 留给 A,但它不起作用,我丢失了数据。

如何在每种情况下都保留存储值?

谢谢

最佳答案

Swift 3.0 代码...

当第一次打开 ViewControllerB 然后在 UserDefaults 中添加联系人字典然后返回 ViewControllerA 并返回打开的 ViewControllerB 然后检查 UserDefaults 是否为空。如果 UserDefaults 不为空,则从 UserDefaults 中检索数据并在 UserDefaults

中显示其他设置数据

This code add in viewWillAppear Method in ViewControllerB

 if  let data = UserDefaults.standard.object(forKey: key) {
contacts = NSKeyedUnarchiver.unarchiveObject(with: data)
}
else {
contacts[0] = ["Name": "Me", "Number": "Hihi I'm not going to show my phone number"]
let archiver = NSKeyedArchiver.archivedData(withRootObject: contacts)
UserDefaults.standard.set(archiver, forKey: key)
}

关于ios - 当我返回 ViewController 时如何在 ViewController 中存储数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45478897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com