gpt4 book ai didi

objective-c - 使用 ARC 从导航 Controller 弹出时保留 View Controller

转载 作者:行者123 更新时间:2023-12-01 16:55:06 24 4
gpt4 key购买 nike

我有两个 TableView 和一个由 UINavigationController 管理的详细信息 View .当在第二个表上选择一行时,它会弹出到一个详细 View ,允许更改该行表示的特定数据。我需要能够在 UITableView 之间切换和 UIViewController不会丢失 UIViewController 中可能已更改的任何数据(按钮选择、在字段中输入的文本值等)。

基本上,一旦 UIViewController呈现,应该能够在表格和详细 View 之间来回切换而不会丢失任何数据。

问题是,当 UIViewController从导航 Controller 中弹出,该内存会自动释放,并且由于我使用的是 ARC,所以我不能只使用 retain 保留指向它的指针UITableView 中的命令.

我知道每次选择相应的表行时我都​​可以手动重建 View ,但我觉得这可能是一个困惑的解决方案。我想到的另一个选择是保留一组插入 UIViewControllers并在创建新值之前检查所选表行是否与现有值对应,但这也可能会变得困惑。

有什么建议么?

最佳答案

您在这种来回 View 中的最终愿望是您在问题中所说的:您希望在 View Controller 之间切换而不会丢失在这些 Controller 中执行的操作的任何信息。
但是,如果您考虑 MVC 模式的工作原理,您应该将 View Controller 视为 View 和模型之间的粘合逻辑。 View 不是持久的,这就是为什么 ARC 在不再需要 View 时摆脱拥有的 View Controller 是合法的。相反,当您的应用程序运行时,您应该只保留模型数据:模型数据将在所涉及的 View Controller 之间共享,每次都将重新创建 View Controller ,并且将根据模型数据更新相应的 View 。 View Controller 应该保持事件状态的唯一原因是它的 alloc-init-loadView 占用太多(例如: View 是 OpenGL 支持的)但在这种情况下,我建议您在 AppDelegate 和要求它在替换模型数据时刷新内容。

所以基本上你应该做的是:
- 选择表
- 提取与表关联的模型数据,包括与 View Controller 相关的所有信息
- 推送 View Controller ;保存对模型的所有 View 修改
- 弹出 View Controller 时,仅返回模型数据
- 下次,当您再次推送 View Controller 时,您将恢复模型并重新初始化 View Controller 。

这种方法并不复杂,并且可以让您以简洁的方式构建应用程序。明天您可以更改您的 View Controller 结构(即它的 View 和逻辑),而不会影响与其他 View Controller 的通信,因为这仅由模型传递管理。

关于objective-c - 使用 ARC 从导航 Controller 弹出时保留 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12391544/

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