iOS-视图(ViewController),具有持久数据

时间:2018-10-07 12:21:19

标签: ios swift uiviewcontroller viewcontroller

我目前正在使用Xcode / swift 4开发一个应用程序,在该应用程序中我需要一个视图(让它称为loggerView)(不是主视图),以便能够从主视图(或其他视图)中获取数据。一种允许在显示loggerView时显示所述数据的方式(在这种情况下使用文本视图)。我了解可以在转换到loggerView时使用segue将此数据(文本日志msg)显示/推送到loggerView,但是有几个问题:

  1. 使用segues时,只能通过过渡时的segue准备一次推送所有数据,而不能零散地推送数据。

  2. 当用户退出loggerView返回主视图(或其他视图)时,loggerView中的所有数据都会丢失。

由于(2),我需要主视图来存储与我要在loggerView中显示的信息有关的所有日志记录数据,以便在选择loggerView时可以每次提供所有数据。这是不理想的,因为我不希望主视图存储此数据,我正在寻找一种将数据激发到loggerView的方法,就像委托可以从loggerView-> primaryView进行工作一样,可以在以下位置调用它在显示loggerView的任何时间。

我认为这里的主要问题是我正在使用父级->子级视图(使用导航控制器),其中每次从子级转换回父级时,都会从内存中删除子级视图(在这种情况下为loggerView)因此所有与loggerView有关的数据都将被删除,因此每次打开loggerView时都需要隔离所有内容。

是否有一种方法可以使一个以上的视图永久化(在内存上为永久),然后在临时基础上在primaryView和另一个视图之间发送数据,就像委托可以反向工作(loggerView-> primaryView)一样?

1 个答案:

答案 0 :(得分:0)

在评论中总结我们的讨论:

您反对将孩子的数据存储回父母中的反对可能是错位了。这种行为是正常和标准的。如果您坚持要与众不同,则可以将数据保留在UserDefaults中,因为它们既是全局的又是持久的,但这通常被认为是a脚。

实际上,您只希望持久保存视图控制器只是为了持久保存从用户那里获取的某些数据是错误的。假设弹出一个对话框,要求您输入名称。输入名称,然后点击确定,对话框消失。您不相信对话框应该只保留名称就在幕后继续,对吗?否,名称仍然存在。该对话框以及使该对话框出现的所有机制,只是为了管理用户界面而已。

在您工作时一遍又一遍地向自己重复“模型视图控制器”(MVC)可能会有所帮助。从用户收集的数据是模型。如果您希望它持续存在,请持续 it 。但是不要仅仅为了做到这一点而坚持一个视图控制器。认为视图控制器是敏捷的;他们的目的是来去去去,因为他们控制的观点来去去去。如果您有需要保留的数据,则需要将其传递或放置在更持久的位置。模型,视图,控制器。三件事。不要试图将控制器变成模型!