曾静的技术博客

但行好事,莫问前程.

嗨,我是曾静 (@devzeng),目前暂居深圳。


这是我用来记录平日学习笔记的地方,欢迎您的访问.

iOS开发中Settings.bundle的使用

在iOS开发中很多时候开发者需要让用户自行设置一些系统的配置项目,比如让用户设置是否支持在3G模式下加载数据,或者是让用户自己设置支不支持网络数据缓存的功能。另外在企业级应用开发中经常有需要对后台的访问地址进行调整那么需要用户自行的进行配置,下面是爱奇艺和招商银行的设置配置项:

app_settings.png

###Settings.bundle配置说明

在Settings.bundle中支持如下几种配置项:

settings_preference_control_types.png

1、Group

Group类似于UITableView中的Group分组,用来表示一组设置项,配置如下所示:

settings_bundle_group.png

配置项说明:

(1)Title:表示分组的显示标题

(2)Type:默认是Group

(3)FooterText:Group的底部显示的文字内容

2、Multi Value

Multi Value是为了让用户在多个值中选择需要的内容,相当于下拉列表的形式进行选择,配置如下所示:

settings_bundle_multi_value.png

配置项说明:

(1)Type:默认是Multi Value

(2)Title:配置项显示的标题

(3)Identifier:设置项的标识符,用于读取配置项的配置内容

(4)Default Value:默认的值,对应的是Values中的项目

(5)Titles:显示的标题的集合

(6)Values:显示的值的集合,与标题一一对应

3、Slider

settings_bundle_slider.png

配置项说明:

(1)Type:配置类型,默认是Slider

(2)Identifier:设置项的标识符,用于读取配置项的配置内容

(3)Default Value:默认值,Number类型

(4)Minimum Value:最小值,Number类型

(5)Maximum Value:最大值,Number类型

(6)Max Value Image Filename:最大值那一端的图片。

(7)Min Value Image Filename:最小值那一端的图片。

4、Text Field

settings_bundle_text_field.png

配置项说明:

(1)Text Field is Secure:是否为安全文本。如果设置为YES,则内容以圆点符号出现。

(2)Autocapitalization Style:自动大写。有四个值: None(无)Sentences(句子首字母大写)Words(单词首字母大写)All Characters(所有字母大写)

(3)Autocorrection Style:自动纠正拼写,如果开启,你输入一个不存在的单词,系统会划红线提示。有三个值:Default(默认)No Autocorrection(不自动纠正)Autocorrection(自动纠正)

(4)Keyboard Type:键盘样式。有五个值:Alphabet(字母表,默认)Numbers and Punctuation(数字和标点符号)Number Pad(数字面板)URL(比Alphabet多出了.com等域名后缀)Email Address(比Alphabet多出了@符合)

5、Title

settings_bundle_title.png

配置项说明:

(1)Type:默认是Title

(2)Title:配置项显示的标题

(3)Identifier:设置项的标识符,用于读取配置项的配置内容

(4)Default Value:默认的值

6、Toggle Switch

Toggle Switch是一个类似于UISwitch的选项,用于设置简单的开启或者关闭的选项,配置如下所示:

settings_bundle_toggle.png

配置项说明:

(1)Type:默认是Toggle Switch

(2)Title:配置项显示的标题

(3)Identifier:设置项的标识符,用于读取配置项的配置内容

(4)Default Value:默认的值

###在项目中使用

1、添加Setting.bundle文件到项目中

add_settings_bundle.png

2、读取配置信息

- (void)readingPreference
{
    //获取Settings.bundle路径
    NSString *settingsBundle = [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"];
    if(!settingsBundle)
    {
        NSLog(@"找不到Settings.bundle文件");
        return;
    }
    //读取Settings.bundle里面的配置信息
    NSDictionary *settings = [NSDictionary dictionaryWithContentsOfFile:[settingsBundle stringByAppendingPathComponent:@"Root.plist"]];
    NSArray *preferences = [settings objectForKey:@"PreferenceSpecifiers"];
    NSMutableDictionary *defaultsToRegister = [[NSMutableDictionary alloc] initWithCapacity:[preferences count]];
    for(NSDictionary *prefSpecification in preferences)
    {
        NSString *key = [prefSpecification objectForKey:@"Key"];
        if(key)
        {
            [defaultsToRegister setObject:[prefSpecification objectForKey:@"DefaultValue"] forKey:key];
        }
    }
    [[NSUserDefaults standardUserDefaults] registerDefaults:defaultsToRegister];
    [[NSUserDefaults standardUserDefaults] synchronize];
    //TODO:读取指定数据
}

3、在AppDelegate中读取配置信息

(1)应用启动后读取配置信息

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    //读取配置文件
    [[SystemConfigHelper shared] readingPreference];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}

(2)应用程序进入到前台后读取配置信息

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    //读取配置信息
    [[SystemConfigHelper shared] readingPreference];
}

说明:

SystemConfigHelper是用来读取系统配置信息的工具.

###典型实例

1、爱奇艺iPhone客户端的Settings.bundle配置

2、招商银行iPhone客户端的Settings.bundle配置

###参考资料

1、《整合Settings.bundle显示版本信息》

2、《应用程序首选项(application preference)及数据存储》

3、《设置束(Setting Bundle)的使用》

4、《三十而立,从零开始学ios开发(十九):Application Settings and User Defaults(上)》

最近的文章

iOS8中Today Extension的使用

扩展(Extension)是iOS 8中引入的一个非常重要的新特性。扩展让app之间的数据交互成为可能。用户可以在app中使用其他应用提供的功能,而无需离开当前的应用。iOS 8系统有6个支持扩展的系统区域,分别是Today、Share、Action、Photo Editing、Storage Provider、Custom keyboard。支持扩展的系统区域也被称为扩展点。对于赛事比分,股票、天气、快递这类需要实时获取的信息,可以在通知中心的Today视图中创建一个Today扩展实现。...…

iOS继续阅读
更早的文章

使用GitHub进行项目托管

Git 是由 Linux 之父 Linus Tovalds 为了更好地管理linux内核开发而创立的分布式版本控制/软件配置管理软件。目前支持 Windows 、MacOSX 、Linux 等多种主流平台,特点为快速、高效及易于使用。###在GitHub上创建一个新的repository1、在浏览器中输入https://github.com/login登录GitHub.2、登录完成后,点击页面的右上角的加号,选择New repository.3、为repository创建一个简短的、易记的...…

Note继续阅读