【问题标题】:Best practices for handling user preferences in an iPhone MVC app?在 iPhone MVC 应用程序中处理用户首选项的最佳实践?
【发布时间】:2009-06-07 19:17:51
【问题描述】:

我正在开发我的第一个 iPhone 应用程序,在实现用户偏好时,我有几个关于如何最好地实现它的问题。

假设基本的 MVC 模式:MainView 显示存储在 Model 对象中的数据; MainViewController 处理应用程序逻辑。

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

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

其次,谁拥有期权数据?它们是应用程序首选项,但将它们存储在 AppDelegate 中似乎是错误的。 MainViewController 主要关心选项,OptionsViewController 需要编辑它们,但那些人彼此不了解,他们可能也不应该了解。 RootViewController 知道这两者,所以他可以很好地在它们之间传递选项,但同样,这似乎是错误的。

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

【问题讨论】:

  • briankc,这很有帮助,谢谢。但是我仍然想知道选项从将编辑它们的 OptionsViewController 到需要知道它们何时更改的 MainViewController 之间的通信。 OptionsViewController 可以通过 NSUserDefaults 写入它们,然后发送一个 NSNotification,它将被 MainViewController 拾取,然后从 NSUserDefaults 读取选项。这合理吗?

标签: iphone objective-c model-view-controller preferences options


【解决方案1】:

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

您可以像这样存储和检索默认值:

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

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

NSUserDefaults 将自动负责从磁盘读取和序列化到磁盘。

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

【讨论】:

  • 为了进一步扩展,您还可以使用设置包,它使用(加载)到 NSUserDefaults 中,并将您的首选项安装到 iPhone 本身的设置应用程序中。因此,用户偏好可以在应用程序本身之外进行更改。这是 Apple 的首选方法。
  • 在这两个地方都有您的偏好不一定是 Apple 的首选方法。请参阅tinyurl.com/cqyqja“在您的应用程序中提供相同的首选项集可能需要太多屏幕,并可能导致用户混淆。”
猜你喜欢
  • 2014-03-07
  • 1970-01-01
  • 1970-01-01
  • 2011-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多