视图之间的持久数据

时间:2009-06-05 08:07:50

标签: iphone objective-c cocoa-touch

所以我读了大部分Jeff LaMarche的书,我似乎仍然无法理解这一点......

如何在各种视图之间保留数据?例如,使用标准的“Utility Application”模板,我希望能够在前端和后端之间共享变量......怎么做?

(我也想将这些变量写入磁盘,以便应用程序在退出时不会丢失它们,但我想这是另一个故事)

3 个答案:

答案 0 :(得分:3)

使用MVC模式(模型视图控制器)。

您的模型存储要应用于它们的状态(例如变量)和逻辑。您的视图显示存储在模型中的值。您的控制器具有指向模型和视图的链接。

View显示您的模型,用户可以与之交互。视图不对模型应用更改,视图仅读取模型以显示值。 View向控制器发送有关事件的通知(例如,您使用控制器上的方法按下按钮)。控制器更新模型(增量/减量变量,执行操作,更改用户名等)。

在通知视图中控制器更新模型后重新显示自身。由于视图具有与模型的链接,因此它会读取新值并显示它们。

您可以将多个视图连接到同一个控制器或多个控制器操作您的模型。

保存/恢复数据也是如此。您的控制器可以从文件加载数据或只是将文件传递给您的模型以初始化自己。初始化模型后,控制器请求视图将自行更新。

等等。

在Apple文档中阅读模型 - 视图 - 控制器模式,它附带了示例。

答案 1 :(得分:3)

我认为你可能会错过这一点,即魔术或'免费'都不会发生这种情况。最重要的是,您需要编写代码来设置关系并在视图之间传输数据。

有很多方法可以做到这一点。正如Stefan所说,最好的方法是使用MVC设计模式。但有更简单的方法。 Nikolia指出,您可以将值存储到默认系统,并从每个视图中访问它。

最简单的可能是使用AppDelegate作为模型和控制器的替代品。

将数据添加到AppDelegate的定义中,然后从视图控制方法中设置它,并从视图设置代码中读取它。它不漂亮或聪明,但它可以快速轻松地为您的siple应用程序完成工作,让您继续学习其他东西。

答案 2 :(得分:0)

在这个网站上有一个很棒的discussion关于MVC。

特别要看Clint的答案 - 以及他对控制器的init方法添加参数的描述(例如initWarehouse :) - 因为这是你在视图之间传递模型的方法。

至于保存 - 您传递的模型可以使用您正在阅读的书中描述的一种机制写出来。