1. 概述
大部分APP设置项都通过Cocoa preferences system:userdefaults system完成。
2. 关于user defaults system
2.1 创建一个正确的preference
使用简单的数据值、数据类型
支持string、number、date,也支持NSData,不推荐使用。
2.2 提供一个设置界面
经常变化的设置项使用APP中的自定义UI,不常变化的设置项通过SettingsBundle实现。
自定义设置项UI,没有标准的实现方案,按自己的需要实现。
2.3 Preferences的组织结构
每个设置项由三部分构成:
² 它所在在的域,比如APP专有设置项、系统设置项。
² 它的名字,是一个NSString对象。
² 它的值, (NSData, NSString, NSNumber, NSDate, NSArray,or NSDictionary)
搜索设置项时,在NSUserDefaults对象的搜索列表中进行,如下表:(按顺序搜索)
Domain |
State |
volatile |
|
Application (Identified by the app’s identifier) |
persistent |
persistent |
|
Languages (Identified by the language names) |
volatile |
volatile |
TheArgument Domain
它由命令行参数组成(如果程序为命令行启动),使用 NSArgumentDomain 常量标识,系统自动把命令行参数放到这个域中。
TheApplication Domain
包含APP特定的设置项,存储在当前用户UserDefaults数据库里。 因为这个域是对特定app的,所以域的内容是和appbundle标识绑定的。它的数据文件名为<ApplicationBundleIdentifer>.plist, 这里的<ApplicationBundleIdentifer> 指 app的 bundle标识。
TheGlobal Domain
包含对所有APP有效的设置项,通过NSGlobalDomain 常量标识。这个域是系统Framework用来存储整个系统适用的设置项值,不应该被APP来存储特定APP的值。如果你想修改GlobalDomain中的设置项,那么应该在applicationDomain中加入同名的设置项,来设置值。
TheLanguages Domains
对于AppleLanguages 设置项中的每一种语言,系统把语言相关的(language-specific)设置项值存入到基于这个语言名字命名的特定域中。很多Foundation中的类(比如:NSDate、NSDateFormatter等等)使用特定语言域中的信息修改它们的行为。
TheRegistration Domain
为设置项提供默认值,如果设置项没有在其它域中明确设置过。