SettingBundle

 import UIKit

 class ViewController: UIViewController {

     var userDefault = NSUserDefaults.standardUserDefaults()

     @IBOutlet weak var textField: UITextField!

     @IBAction func btnSave(sender: UIButton) {
         updateUserDefaults()
     }

     @IBAction func btnLoad(sender: UIButton) {
         var text = userDefault.stringForKey("textField")
         textField.text = text
     }

     override func viewDidLoad() {
         super.viewDidLoad()

         /**
         设置应用:
         新建一个文件:resource中的setting bundle-----运行之后直接在设置里面打开。拉到最后吗久能看到
         */
         /**
         好下面解释下Settings.bundle:

         在Settings.bundle 中en.iproj为多语言的,暂时不管。我们主要关心的是Root.plist文件。 这个文件决定了我们存储的数据在设置菜单里面显示的方式,它有7个类型:

         Group -- 编组。键为PSGroupSpecifier,首选项逻辑编组的标题。
         Text Field -- 文本框。键为PSTextFieldSpecifier,可编辑的文本字符串。
         Title -- 标题。键为PSTitleValueSpecifier,只读文本字符串。
         Toggle Switch -- 开关。键为PSToggleSwitchSpecifier,开关按钮。
         Slide -- 滑块。键为PSSliderSpecifier,取值位于特定范围内的滑块。
         Multivalue -- 多值。键为PSMultiValueSpecifier,下拉式列表。
         Child Pane -- 子窗格。键为PSChildPaneSpecifier,子首选项页。

         一些类型的特定属性说明:

         Text Field

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

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

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

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

         Toggle Switch

         Value for ON -- 当开关置为ON时,取得的字符串值。

         Value for OFF -- 当开关置为OFF时,取得的字符串值。

         Slider

         Minimum Value -- 最小值,Number类型。

         Maximum Value -- 最大值,Number类型。

         Min Value Image Filename -- 最小值那一端的图片。

         Max Value Image Filename -- 最大值那一端的图片。

         P.s.图片大小必须为21*21,并且要放在Settings.bundle包内(在Finder里显示包内容,然后粘贴)。

         Multivalue

         Values -- 值的集合。

         Titles -- 标题的集合,与值一一对应。

         Child Pane

         Filename -- 子plist的文件名。
         这里的Item0非常重要,Item0的类型是Group,对应的是一个分组表格类型,然后下面的Item都在这个分组表格中,直到遇到下一个Group。(即图二中为一个组,需要添加下一组就要在加入Group类型)

         在我们这个实例中:(设置一个组,第一项为输入名称的编辑框,第二项为YES/NO的开关变量,第三项为Slider的滑动)

         Item0:关键设置type:Group,显示标题为:Group。

         Item1:关键设置type:Text Field ,Title:Name, Identifier:name_preference, 设置Identifier就是通过ObjectForKey来查找数据。
         */

         loadDefaults()

         getUserDefaults()

     }

     //加载默认的程序涉叙应用设置
     func loadDefaults() {
         //setting Bundle
         var settingBundle = NSBundle.mainBundle().pathForResource("Settings", ofType: "bundle")
         if settingBundle == nil {
             return
         }

         //Root
         var root = NSDictionary(contentsOfFile: settingBundle!.stringByAppendingPathComponent("Root.plist"))
         //字典中获取值
         var prefrences: AnyObject? = root?.objectForKey("PreferenceSpecifiers")  as? Array<NSDictionary>
         //将数组中的字典内容放到一个字典包里面
         var defaultsToRegister = NSMutableDictionary(capacity: root!.count)

         for prefrence in prefrences {   //'AnyObject?' dose not have a member named 'Generator'
             var key = prefrence.objectForkey("Key") as String?
             if key != nil {
                 defaultsToRegister.setValue(prefrences.objectForKey("DefaultValue"), forKey: key)
             }
         }
         NSUserDefaults.standardUserDefaults().registerDefaults(defaultsToRegister as [NSObject : AnyObject])
     }

     override func didReceiveMemoryWarning() {
         super.didReceiveMemoryWarning()
         // Dispose of any resources that can be recreated.
     }

     //读取
     func getUserDefaults() {
         var defaults = NSUserDefaults.standardUserDefaults()
         var title = defaults.objectForKey("name_preference") as! String
         textField.text = title
     }

     //更改系统设置
     func updateUserDefaults() {
         var defaults = NSUserDefaults.standardUserDefaults()
         defaults.setBool(false, forKey: "enabled_preference")
         defaults.synchronize()
     }
 }
 

iOS开发——数据持久化Swift篇&SettingBundle的更多相关文章

  1. iOS开发——数据持久化Swift篇&使用Core Data进行数据持久化存储

    使用Core Data进行数据持久化存储   一,Core Data介绍 1,Core Data是iOS5之后才出现的一个数据持久化存储框架,它提供了对象-关系映射(ORM)的功能,即能够将对象转化成 ...

  2. iOS开发——数据持久化Swift篇&(一)NSUserDefault

    NSUserDefault //******************** 5.1 NSUserDefault和对象归档 func useNSUserDefault() { //通过单利来创建一个NSU ...

  3. iOS开发——数据持久化Swift篇&文件目录路径获取(Home目录,文档目录,缓存目录等)

    文件目录路径获取(Home目录,文档目录,缓存目录等)   iOS应用程序只能在自己的目录下进行文件的操作,不可以访问其他的存储空间,此区域被称为沙盒.下面介绍常用的程序文件夹目录:   1,Home ...

  4. iOS开发——数据持久化Swift篇&iCloud云存储

    iCloud云存储 import UIKit class ViewController: UIViewController { override func viewDidLoad() { super. ...

  5. iOS开发——数据持久化Swift篇&(四)CoreData

    CoreData import CoreData class ViewController: UIViewController { override func viewDidLoad() { supe ...

  6. iOS开发——数据持久化Swift篇&(三)SQLite3

    SQLite3 使用 //******************** 5.3 SQLite3存储和读取数据 func use_SQLite3() { //声明一个Documents下的路径 var db ...

  7. iOS开发——数据持久化Swift篇&(二)沙盒文件

    沙盒文件 //******************** 5.2 文件操作 func use_FileOperations() { //1.获取程序的Home目录 let homeDirectory = ...

  8. iOS开发——数据持久化Swift篇&通用文件存储

    通用文件存储 import UIKit class ViewController: UIViewController { @IBOutlet weak var textField: UITextFie ...

  9. iOS开发——数据持久化Swift篇&模型对象归档

    模型对象归档 import UIKit class ViewController: UIViewController { @IBOutlet weak var textField: UITextFie ...

随机推荐

  1. [swustoj 1088] 德州扑克

    德州扑克(1088) 问题描述 德州扑克是一款风靡全球的扑克游戏.德州扑克一共有52张牌,没有王牌.每个玩家分两张牌作为“底牌”,五张由荷官陆续朝上发出的作为公共牌.开始的时候,每个玩家会有两张面朝下 ...

  2. PopupWindow-弹窗的界面

      1 效果图 2 知识点 PopupWindow(View contentView, int width, int height) //创建一个没有获取焦点.长为width.宽为height,内容为 ...

  3. Hibernate事务与并发问题处理(乐观锁与悲观锁)

    目录 一.数据库事务的定义 二.数据库事务并发可能带来的问题 三.数据库事务隔离级别 四.使用Hibernate设置数据库隔离级别 五.使用悲观锁解决事务并发问题 六.使用乐观锁解决事务并发问题 Hi ...

  4. 关于 tomcat 集群中 session 共享的三种方法

    前两种均需要使用 memcached 或redis 存储 session ,最后一种使用 terracotta 服务器共享. 建议使用 redis,不仅仅因为它可以将缓存的内容持久化,还因为它支持的单 ...

  5. Spring入门之HelloSpring

    Spring描述: -轻量级:Spring是非侵入式的-基于Spring开发的应用中的对象可以不依赖于Spring的API -依赖注入(DI---dependency injection,IOC) - ...

  6. 使用SharePoint 2010的母版页

    转:http://tanyanbo2.blog.163.com/blog/static/97339159201111591458902/ SharePoint 2010母版页所用的还是ASP.NET ...

  7. Entity Framework4.0 (七) EF4的存储过程

    前面了解了EF4的CRUD的操作,你会发现EF4使用起来比较简单的.呵呵,之前我们使用数据库的时候,有时会使用存储过程代替在代码中直接使用SQL语句. 使用存储过程的好处: 提高效率:因为存储过程是经 ...

  8. Ext基础一(转载)

    要学习及应用好Ext框架,必须需要理解Html DOM.Ext Element及Component三者之间的区别. 每一个HTML页面都有一个层次分明的DOM树模型,浏览器中的所有内容都有相应的DOM ...

  9. sqlserver 2008 R2 分区表测试

    有一张表期中有100多w条数据 程序执行起来比较慢,想用分区表的办法,使查询变快一些. 方案如下 --查看分区信息SELECT * FROM sys.partition_range_values -- ...

  10. 设计模式_Command_命令模式

    形象例子: 俺有一个MM家里管得特别严,没法见面,只好借助于她弟弟在我们俩之间传送 信息,她对我有什么指示,就写一张纸条让她弟弟带给我.这不,她弟弟又传送过来一个COMMAND,为了感谢他,我请他吃了 ...