標籤:
SettingBundle
1 import UIKit 2 3 class ViewController: UIViewController { 4 5 var userDefault = NSUserDefaults.standardUserDefaults() 6 7 @IBOutlet weak var textField: UITextField! 8 9 @IBAction func btnSave(sender: UIButton) { 10 updateUserDefaults() 11 } 12 13 @IBAction func btnLoad(sender: UIButton) { 14 var text = userDefault.stringForKey("textField") 15 textField.text = text 16 } 17 18 override func viewDidLoad() { 19 super.viewDidLoad() 20 21 /** 22 設定應用: 23 建立一個檔案:resource中的setting bundle-----運行之後直接在設定裡面開啟。拉到最後嗎久能看到 24 */ 25 /** 26 好下面解釋下Settings.bundle: 27 28 在Settings.bundle 中en.iproj為多語言的,暫時不管。我們主要關心的是Root.plist檔案。 這個檔案決定了我們儲存的資料在設定菜單裡面顯示的方式,它有7個類型: 29 30 Group -- 編組。鍵為PSGroupSpecifier,喜好設定邏輯編組的標題。 31 Text Field -- 文字框。鍵為PSTextFieldSpecifier,可編輯的文本字串。 32 Title -- 標題。鍵為PSTitleValueSpecifier,唯讀文本字串。 33 Toggle Switch -- 開關。鍵為PSToggleSwitchSpecifier,開關按鈕。 34 Slide -- 滑塊。鍵為PSSliderSpecifier,取值位於特定範圍內的滑塊。 35 Multivalue -- 多值。鍵為PSMultiValueSpecifier,下拉式列表。 36 Child Pane -- 子窗格。鍵為PSChildPaneSpecifier,子喜好設定頁。 37 38 一些類型的特定屬性說明: 39 40 Text Field 41 42 Text Field is Secure -- 是否為安全文本。如果設定為YES,則內容以圓點符號出現。 43 44 Autocapitalization Style -- 自動大寫。有四個值: None(無)、Sentences(句子首字母大寫)、Words(單字首大寫)、All Characters(所有字母大寫)。 45 46 Autocorrection Style -- 自動糾正拼字,如果開啟,你輸入一個不存在的單詞,系統會劃紅線提示。有三個值:Default(預設)、No Autocorrection(不自動糾正)、Autocorrection(自動糾正)。 47 48 Keyboard Type -- 鍵盤樣式。有五個值:Alphabet(字母表,預設)、Numbers and Punctuation(數字和標點符號)、Number Pad(數字面板)、URL(比Alphabet多出了.com等網域名稱尾碼)、Email Address(比Alphabet多出了@符合)。 49 50 Toggle Switch 51 52 Value for ON -- 當開關置為ON時,取得的字串值。 53 54 Value for OFF -- 當開關置為OFF時,取得的字串值。 55 56 Slider 57 58 Minimum Value -- 最小值,Number類型。 59 60 Maximum Value -- 最大值,Number類型。 61 62 Min Value Image Filename -- 最小值那一端的圖片。 63 64 Max Value Image Filename -- 最大值那一端的圖片。 65 66 P.s.圖片大小必須為21*21,並且要放在Settings.bundle包內(在Finder裡顯示包內容,然後粘貼)。 67 68 Multivalue 69 70 Values -- 值的集合。 71 72 Titles -- 標題的集合,與值一一對應。 73 74 Child Pane 75 76 Filename -- 子plist的檔案名稱。 77 這裡的Item0非常重要,Item0的類型是Group,對應的是一個分組表格類型,然後下面的Item都在這個分組表格中,直到遇到下一個Group。(即圖二中為一個組,需要添加下一組就要在加入Group類型) 78 79 在我們這個執行個體中:(設定一個組,第一項為輸入名稱的編輯框,第二項為YES/NO的開關變數,第三項為Slider的滑動) 80 81 Item0:關鍵設定type:Group,顯示標題為:Group。 82 83 Item1:關鍵設定type:Text Field ,Title:Name, Identifier:name_preference, 設定Identifier就是通過ObjectForKey來尋找資料。 84 */ 85 86 loadDefaults() 87 88 getUserDefaults() 89 90 } 91 92 //載入預設的程式涉敘應用設定 93 func loadDefaults() { 94 //setting Bundle 95 var settingBundle = NSBundle.mainBundle().pathForResource("Settings", ofType: "bundle") 96 if settingBundle == nil { 97 return 98 } 99 100 //Root101 var root = NSDictionary(contentsOfFile: settingBundle!.stringByAppendingPathComponent("Root.plist"))102 //字典中擷取值103 var prefrences: AnyObject? = root?.objectForKey("PreferenceSpecifiers") as? Array<NSDictionary>104 //將數組中的字典內容放到一個字典包裡面105 var defaultsToRegister = NSMutableDictionary(capacity: root!.count)106 107 for prefrence in prefrences { //‘AnyObject?‘ dose not have a member named ‘Generator‘108 var key = prefrence.objectForkey("Key") as String?109 if key != nil {110 defaultsToRegister.setValue(prefrences.objectForKey("DefaultValue"), forKey: key)111 }112 }113 NSUserDefaults.standardUserDefaults().registerDefaults(defaultsToRegister as [NSObject : AnyObject])114 }115 116 override func didReceiveMemoryWarning() {117 super.didReceiveMemoryWarning()118 // Dispose of any resources that can be recreated.119 }120 121 //讀取122 func getUserDefaults() {123 var defaults = NSUserDefaults.standardUserDefaults()124 var title = defaults.objectForKey("name_preference") as! String125 textField.text = title126 }127 128 //更改系統設定129 func updateUserDefaults() {130 var defaults = NSUserDefaults.standardUserDefaults()131 defaults.setBool(false, forKey: "enabled_preference")132 defaults.synchronize()133 }134 }
iOS開發——資料持久化Swift篇&SettingBundle