zpa*_*ack 3 iphone model-view-controller objective-c options preferences
我正在开发我的第一个iPhone应用程序,在实现用户首选项时,我有一些关于如何最好地实现它的问题.
假设基本的MVC模式:MainView显示存储在Model对象中的数据; MainViewController处理app逻辑.
对于选项,我有一个OptionsView和一个OptionsViewController.RootViewController处理Main和Options视图的交换.
首先,选项数据怎么样?我想创建一个NSOjbect派生类来存储它们(一个OptionsModel)吗?或者一个简单的NSDictionary就足够了?
第二,谁拥有期权数据?它们是应用程序首选项,但将它们存储在AppDelegate中似乎是错误的.MainViewController主要关注选项,而OptionsViewController需要编辑它们,但是这些人不会彼此了解,也不应该相互了解.RootViewController知道两者,所以他处于一个很好的位置,可以在它们之间传递选项,但同样,这似乎是错误的.
最后,MainViewController将经常需要访问选项.他应该每次调用选项模型来获得一些选项,还是缓存他自己的副本?我不喜欢额外开销检索选项数据的想法,但让MainViewController具有可能不同步的副本也不是很吸引人.
看看NSUserDefaults.它是为此特定目的而设计的字典样式集合类.
您存储和检索默认值,如下所示:
// Fetch a default
BOOL deleteBackup = [[NSUserDefaults standardUserDefaults] boolForKey:@"DeleteBackup"];
// Save a default
[[NSUserDefaults standardUserDefaults] setObject:@"NO" forKey:@"DeleteBackup"];
Run Code Online (Sandbox Code Playgroud)
NSUserDefaults将自动负责读取和序列化到磁盘.
关于您的其他问题,这取决于您的应用的整体架构.在OptionsViewController完成时发送通知听起来像是一种合理的方法.但是,您也可以在MainViewController或应用程序委托(即"-reloadUserDefaults")上定义一个方法,您可以在完成时从OptionsViewController调用该方法.
| 归档时间: |
|
| 查看次数: |
4172 次 |
| 最近记录: |