gpt4 book ai didi

ios - 快速地,如何在保留数据的同时将 UIViewController 向下转换为子类的子类?

转载 作者:行者123 更新时间:2023-11-30 12:29:26 25 4
gpt4 key购买 nike

目前我正在开发一个项目,并尝试使用此方法从 Storyboard实例化的 View Controller 进行向下转换

let cl = self.storyboard?.instantiateViewController(withIdentifier: "contact_list_view")
let contact_list_controller = cl as? ContactListViewController

是的,当前 View 的标识符和 View Controller 类型是在 Storyboard中设置的。然而,我遇到的问题是一旦它向下转型,成员变量就不会持续存在。

现在:ContactListViewController继承自UITableViewController,而后者继承自UIViewController。在我正在从事的早期项目中,是否存在某种关于多重继承的问题,我没有使用单级继承(A 到 B 而不是当前的 A 到 C)遇到此问题。

@IBAction func switchToContractViewForAdd(_ sender: Any) 
isAdd_or_edit = true;string = "hello"
let contact_view=self.storyboard?.instantiateViewController(withIdentifier:"contact_view")
self.navigation?.pushViewController(contact_view!, animated: true)
}

override func viewDidLoad() {
super.viewDidLoad()
let cl = (self.storyboard?.instantiateViewController(withIdentifier: "contact_list_view"))
contact_list_controller = cl as? ContactListViewController
contact_list_controller?.string ?? "default")
}

好吧,这是我的代码片段,基本上发生的事情是第一个函数充当 segue 转换来显示“contact_view”。加载联系人 View 后,我想访问上一个 View “contact_list_view”中的一些值(为了简单起见,我添加了一个名为 string 的字符串变量,默认值为“hi”,在第一个函数调用时我更改了它“你好”在执行segue之前)。从 Storyboard 中检索“contact_list_view”时尝试向下转换后,字符串的值再次变为“hi”。

最佳答案

您没有获得“hello”的更改值的原因(嗯,部分原因)是因为:

override func viewDidLoad() {
super.viewDidLoad()
let cl = (self.storyboard?.instantiateViewController(withIdentifier: "contact_list_view"))
contact_list_controller = cl as? ContactListViewController
contact_list_controller?.string ?? "default")
}

instantiateViewController 每次调用指定 View Controller 时都会创建一个新实例。因此,无论您在该行之后对其执行什么操作,您都会永远不会获得您试图在 switchToContractViewForAdd() 中设置的值

相反,您需要研究“在 View Controller 之间传递数据”(通过简单的搜索,您将找到无数的示例和解释)。

关于ios - 快速地,如何在保留数据的同时将 UIViewController 向下转换为子类的子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43767098/

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