【发布时间】:2018-10-07 12:21:19
【问题描述】:
我目前正在使用 Xcode/swift 4 开发一个应用程序,我需要一个视图(我们称之为 loggerView),它不是主视图,以便能够从主视图(或其他视图)中获取数据一种允许在显示 loggerView 时显示所述数据的方式(在这种情况下使用文本视图)。我知道在转换到 loggerView 时,我可以使用 segue 将此数据(文本日志消息)呈现/推送到 loggerView,但有几个问题:
使用 segue 时,数据只能在转换时通过 segue prepare 一次全部推送,而不是我需要的零碎的。
当用户退出 loggerView 回到主(或其他)视图时,loggerView 中的所有数据都会丢失。
因为 (2) 我需要主视图来存储与我希望在 loggerView 中显示的信息相关的所有日志记录数据,这样每次都可以提供所有数据。这并不理想,因为我不希望主视图存储它,我正在寻找一种将这些数据触发到 loggerView 的方法,就像委托可能从 loggerView->primaryView 中调用它一样显示 loggerView 时的任何时间。
我认为这里的主要问题是我正在使用父视图原位(使用导航控制器),每次我们从子视图转换回父视图时,子视图(在这种情况下为 loggerView)都会从内存中删除因此与 loggerView 相关的所有数据都被删除,因此每次打开 loggerView 时都需要对所有内容进行 segue。
有没有办法让多个视图永久化(内存方面),然后在 primaryView 和其他视图之间临时发送数据,而不是像委托可能反向工作的方式(loggerView->primaryView)?
【问题讨论】:
-
我不明白您反对将孩子的数据存储回父级。这是正常和标准的。如果您坚持与众不同,为什么不将其保留在 UserDefaults 中?
-
我认为这归结为项目的架构概述,也许我需要在这里改变思维方式。如果在这种情况下子视图只是一个 ViewController,其工作只是显示从应用程序的任何其他部分发生的日志消息,那么在这种情况下将子视图视为所述数据的存储器可能没有用,但是而是创建一个单独的存储容器,将日志传递到其中,然后,当父视图切换到子视图时,让它将这个单独的存储容器作为 segue 的一部分传递给子视图?
-
这是平常的事情。 — 基本上,认为视图控制器是灵活的;他们的目的是来来去去,因为他们控制的观点来来去去。因此,如果您有需要持久化的数据,则需要将其传递出去,或者放在更持久的地方。模型、视图、控制器。三种不同的东西。不要试图把控制器变成模型!
-
将讨论总结为实际答案。
标签: ios swift uiviewcontroller viewcontroller