4

我有一些数据字符串来自我的应用程序的一个屏幕,我想存储(在模型中),然后在用户导航回同一页面时检索它们。现在数据在模型中存储得很好,但是,我遇到了一个问题,因为似乎每次返回屏幕时都会生成一个新的控制器实例。因此,我的模型没有任何好处,因为我失去了对它的引用(它当前作为实例变量存储在我的控制器中)。我究竟做错了什么?

4

4 回答 4

3

我究竟做错了什么?

您通常会有一个在您的文档或应用程序中共享的模型(可能是对象的集合,不一定只有一个)。创建视图控制器时,会为其提供对模型(或模型的某些部分)的引用。如果它反过来创建另一个视图控制器,它会将模型的引用传递给该对象。因此,该模型由所有视图控制器共享。当视图控制器被释放时,模型不会被遗忘,因为其他控制器知道它。

听起来您已经开始使用模型,但它仅限于单个视图控制器。也许你的其他一些视图控制器也有同样的情况。想一想如何将所有这些小模型组合成一个更大的对象图。这将使其更容易记住,并且还允许您将保存整个模型的责任放在单个对象中,例如您的应用程序委托或根视图控制器。

于 2012-05-15T20:48:21.537 回答
0

听起来您需要将模型数据持久化到磁盘,可能使用 NSUserDefaults,这是最适合此类少量数据的存储机制。

于 2012-05-15T20:40:50.090 回答
0

您至少可以考虑以下几个选项:

  1. 正如 Andrew 所说,通过 NSUserDefaults 将数据保存到磁盘。
  2. 使用单例设计模式创建一个数据“管理器”对象,该对象将在应用程序的生命周期内持久保存数据。
  3. 尝试找出为什么要创建视图控制器的新实例(根据您的代码,这可能很明显或不那么明显)并尝试做一些不同的事情以重用视图控制器(考虑到您的代码)。

鉴于您正在使用评论中描述的情节提要,我会考虑选项 2,除非您真正想要做的是更改视图控制器的导航模式。

于 2012-05-15T20:47:41.200 回答
0

当您将视图控制器推送到导航然后返回到它时,它会持续存在。但是,如果您希望某些数据在多个屏幕上持续存在,单例实例是一个好主意。

于 2012-05-15T21:12:55.197 回答