3

我正在开发我的第一个iPhone应用程序,并且在实现用户偏好的同时,我有几个关于如何最好地实现这个问题的问题。在iPhone MVC应用程序中处理用户首选项的最佳做法?

假定基本MVC模式:存储在模型对象的MainView显示数据; MainViewController处理应用逻辑。

对于选择,我有一个OptionsView和OptionsViewController。 RootViewController处理Main和Options视图的交换。

首先,选项数据呢?我想创建一个NSOjbect派生类来存储它们(一个OptionsModel)吗?或者,也许一个简单的NSDictionary就足够了?

二,谁拥有期权数据?它们是应用程序首选项,但将它们存储在AppDelegate中似乎是错误的。 MainViewController主要关心这些选项,而OptionsViewController需要对它们进行编辑,但这些人不会彼此了解,也不应该这样做。 RootViewController知道两者,所以他很好地通过它们之间的选项,但是再次,这似乎是错误的。

最后,MainViewController将经常需要访问的选项。他应该每次调用选项模型来获得选项,还是缓存自己的副本?我不喜欢额外开销检索选项数据的想法,但让MainViewController具有不同步的副本也不太吸引人。

+0

briankc,这非常有帮助,谢谢。但是我仍然想知道从OptionsViewController将编辑它们的选项传递给需要知道它们何时更改的MainViewController。 OptionsViewController可以通过写NSUserDefaults的他们,然后发送NSNotification,将由MainViewController被拾起,然后将读取的NSUserDefaults的选项。这是否合理? – zpasternack 2009-06-07 19:36:29

回答

8

看一看NSUserDefaults。这是一个为此特定目的而设计的字典样式集合类。

您存储和检索的默认值,像这样:

// Fetch a default 
BOOL deleteBackup = [[NSUserDefaults standardUserDefaults] boolForKey:@"DeleteBackup"]; 

// Save a default 
[[NSUserDefaults standardUserDefaults] setObject:@"NO" forKey:@"DeleteBackup"]; 
NSUserDefaults的

将自动的读取和序列化到磁盘上的照顾。

关于你的另一个问题,它取决于你的应用程序的整体架构。 OptionsViewController完成时发送通知对我来说听起来像是一个合理的方法。但是,您也可以在您的MainViewController或应用程序委托(即“-reloadUserDefaults”)上定义一个方法,您可以在OptionsViewController完成时调用它。

+0

为了进一步扩展,您还可以使用一个Settings包,它使用(加载)到NSUserDefaults中,并将您的首选项安装到iPhone本身的Settings应用程序中。因此,用户首选项可以在应用程序本身之外进行更改。 这是Apple首选的方法。 – 2009-06-07 19:27:29

相关问题