你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> IOS-本地存儲-NSUserDefaults

IOS-本地存儲-NSUserDefaults

編輯:IOS開發綜合
一 NSUserDefaults簡介 NSUserDefaults類提供了一個與默認系統進行交互的編程接口。NSUserD efaults對象是用來保存、恢復應用程序相關的偏好設置、配置數據等等。默認系統允許應用程序自定義它的行為去迎合用戶的喜好。你可以在程序運行的時候從用戶默認的數據庫中讀取程序的設置,同時NSUserDefaults的緩存避免了在每次讀取數據時候都打開用戶默認數據庫的操作。可以通過調用synchroni ze方法來使內存中的緩存與用戶默認系統進行同步。NSUserDefaults類提供了非常方便的方法來讀寫常用的類型,常用的方法有:setBool:forKey、setFloat :forKey、setInteger:forKey、setObject:forKey、setDouble:forKey、setURL:forKey,具體使用哪個方法取決於要存儲的數據類型。其中,方法setObject: forKey用於存儲NSString、NSDate、NSArry、NSDictionary等復合對象類型。
二 實例代碼
NSUserDefaults是單例,同時也是線程安全的。使用方法如下: NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; [userDefaults setBool: self.toggleSwitch.on forKey:kOnOffToggle]; [userDefaults setFloat: self.brightnessSlider.value forKey:kBrightnessLevel];
注意:上述代碼將數據寫入默認設置數據庫時,並不一定會立即保存這些數據。還需要進一步調用 synchronize 方法確保所有數據都及時寫入: [userDefaultssynchronize]; 要將這些數據讀入 App 中,可根據鍵值和返回類型,調用相應的方法。根據要讀取的數據類型,可選擇 arrayForKey、boolForKey、dateforKey、 dictionaryForKey、 floatForKey、integerForKey、objectForKey、doubleForKey和URLForKey等方法。
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; self.brightnessSlider.value = [userDefaults floatForKey:kBrightnessLevel]; self.toggleSwitch.on = [userDefaults boolForKey:kOnOffToggle];
NSUserDefaults適合存儲輕量級的本地數據,比如要保存一個登陸界面的數據,用戶名、密碼之類的,個人覺得使用NSUserDefaults是首選。下次再登陸的時候就可以直接從NSUserDefaults裡面讀取上次登陸的信息。

因為如果使用自己建立的plist文件什麼的,還得自己顯示創建文件,讀取文件,很麻煩,而是用NSUserDefaults則不用管這些東西,就像讀字符串一樣,直接讀取就可以了(NSUserDefaults中的數據最終都會存儲到plist屬性列表裡面)。NSUserDefaults支持的數據格式有:NSNumber(Integer、Float、Double),NSString,NSDate,NSArray,NSDictionary,BOOL類型。

NSUserDefaults很方便,讀取也很容易。下面給出一個示例看看如何使用,ViewController.h文件中主要是放幾個控件,用於顯示存儲的數據:

[cpp] view plaincopy
  1. #import
  2. @interface ViewController : UIViewController
  3. {
  4. IBOutlet UILabel *txtInteger;
  5. IBOutlet UILabel *txtFloat;
  6. IBOutlet UILabel *txtDouble;
  7. IBOutlet UILabel *txtNSString;
  8. IBOutlet UILabel *txtNSDate;
  9. IBOutlet UILabel *txtNSArray;
  10. IBOutlet UILabel *txtNSDictionary;
  11. }
  12. @end ViewController.m文件中最重要的是兩個方法:

    saveNSUserDefaults:用於將各種類型數據保存到NSUserDefaults中

    readNSUserDefautls:用於從NSUserDefaults中讀取各種類型的數據。在viewDidLoad中調用這兩個方法就可以看出結果咯

    [cpp] view plaincopy
    1. #import "ViewController.h"
    2. @interface ViewController ()
    3. @end
    4. @implementation ViewController
    5. - (void)viewDidLoad
    6. {
    7. [super viewDidLoad];
    8. [self saveNSUserDefaults]; //調用此方法將各種數據存儲到NSUserDefautls中,在下面定義
    9. [self readNSUserDefaults]; //調用此方法從NSUserDefautls中讀取各種數據,在下面定義
    10. }
    11. - (void)viewDidUnload
    12. {
    13. [txtNSString release];
    14. txtNSString = nil;
    15. [txtNSDate release];
    16. txtNSDate = nil;
    17. [txtNSArray release];
    18. txtNSArray = nil;
    19. [txtNSDictionary release];
    20. txtNSDictionary = nil;
    21. [txtInteger release];
    22. txtInteger = nil;
    23. [txtFloat release];
    24. txtFloat = nil;
    25. [txtDouble release];
    26. txtDouble = nil;
    27. [super viewDidUnload];
    28. // Release any retained subviews of the main view.
    29. }
    30. //保存數據到NSUserDefaults
    31. -(void)saveNSUserDefaults
    32. {
    33. NSString *myString = @"enuola";
    34. int myInteger = 100;

    35. float myFloat = 50.0f;
    36. double myDouble = 20.0;
    37. NSDate *myDate = [NSDate date];
    38. NSArray *myArray = [NSArray arrayWithObjects:@"hello", @"world", nil];
    39. NSDictionary *myDictionary = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"enuo", @"20", nil] forKeys:[NSArray arrayWithObjects:@"name", @"age", nil]];
    40. //將上述數據全部存儲到NSUserDefaults中
    41. NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    42. //存儲時,除NSNumber類型使用對應的類型意外,其他的都是使用setObject:forKey:
    43. [userDefaults setInteger:myInteger forKey:@"myInteger"];
    44. [userDefaults setFloat:myFloat forKey:@"myFloat"];
    45. [userDefaults setDouble:myDouble forKey:@"myDouble"];
    46. [userDefaults setObject:myString forKey:@"myString"];
    47. [userDefaults setObject:myDate forKey:@"myDate"];
    48. [userDefaults setObject:myArray forKey:@"myArray"];
    49. [userDefaults setObject:myDictionary forKey:@"myDictionary"];
    50. //這裡建議同步存儲到磁盤中,但是不是必須的
    51. [userDefaults synchronize];
    52. }
    53. //從NSUserDefaults中讀取數據
    54. -(void)readNSUserDefaults
    55. {
    56. NSUserDefaults *userDefaultes = [NSUserDefaults standardUserDefaults];
    57. //讀取數據到各個label中
    58. //讀取整型int類型的數據
    59. NSInteger myInteger = [userDefaultes integerForKey:@"myInteger"];
    60. txtInteger.text = [NSString stringWithFormat:@"%d",myInteger];
    61. //讀取浮點型float類型的數據
    62. float myFloat = [userDefaultes floatForKey:@"myFloat"];
    63. txtFloat.text = [NSString stringWithFormat:@"%f",myFloat];
    64. //讀取double類型的數據
    65. double myDouble = [userDefaultes doubleForKey:@"myDouble"];
    66. txtDouble.text = [NSString stringWithFormat:@"%f",myDouble];
    67. //讀取NSString類型的數據
    68. NSString *myString = [userDefaultes stringForKey:@"myString"];
    69. txtNSString.text = myString;
    70. //讀取NSDate日期類型的數據
    71. NSDate *myDate = [userDefaultes valueForKey:@"myDate"];
    72. NSDateFormatter *df = [[NSDateFormatter alloc] init];
    73. [df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    74. txtNSDate.text = [NSString stringWithFormat:@"%@",[df stringFromDate:myDate]];
    75. //讀取數組NSArray類型的數據
    76. NSArray *myArray = [userDefaultes arrayForKey:@"myArray"];
    77. NSString *myArrayString = [[NSString alloc] init];
    78. for(NSString *str in myArray)
    79. {
    80. NSLog(@"str= %@",str);
    81. myArrayString = [NSString stringWithFormat:@"%@ %@", myArrayString, str];
    82. [myArrayString stringByAppendingString:str];
    83. // [myArrayString stringByAppendingFormat:@"%@",str];
    84. NSLog(@"myArrayString=%@",myArrayString);
    85. }
    86. txtNSArray.text = myArrayString;
    87. //讀取字典類型NSDictionary類型的數據
    88. NSDictionary *myDictionary = [userDefaultes dictionaryForKey:@"myDictionary"];
    89. NSString *myDicString = [NSString stringWithFormat:@"name:%@, age:%d", [myDictionary valueForKey:@"name"], [[myDictionary valueForKey:@"age"] integerValue]];
    90. txtNSDictionary.text = myDicString;
    91. }
    92. @end

      好了,運行一下,可以看到xib文件中的各種數據已經綁定上了吧?

      vcHLo7/I57rOxNy5u8fls/2jv8bkyrXL/LTmtKLU2tOm08OzzNDyxNrWw7XE0ru49nBsaXN0zsS8/sDvo6zV4rj2v8nS1Lj5vt3Ct762v7S1vaGjscjI58u11eK49srHxOO1xLPM0PLJs7rQzrvWwzogL1VzZXJzL0xpYnJhcnkvQXBwbGljYXRpb24KIFN1cHBvcnQvaVBob25lU2ltdWxhdG9yLzQuMS9BcHBsaWNhdGkqKioqKi8yOTc4OEU0MC1BRjQ3LTQ1QTAtOEU5Mi0zQUMwRjUwMUI3RjQvLKOo1eK49srH06bTw7PM0PK21NOm1NptYWPJz7XEzrvWw6Op1eK49s/Cw+bT0C9MaWJyYXJ5L1ByZWZlcmVjZXOjrMDvw+bT0Lj2cGxpc3TOxLz+o6y05rSitcS+zcrHxOO1xHVzZXJEZWZhdWx0c8/r0qrJvrX0tcS7sKOs08NyZW1vdmVPYmplY3RGb3JLZXm78tXfyb619MmzutCjrNKyvs3Kx8TjtcTTptPDs8zQ8si7uvPW2NDCsLLXsKGjPC9wPgoKPHN0cm9uZz7I/SDXotLizsrM4jwvc3Ryb25nPgoKICAgIDGholVzZXJEZWZhdWx0c8rHuPm+3cqxvOS0wbaoyrG1xLDRu7q05tbQtcTK/b7d0LTI67G+tdi0xcXMo6y2+LfHvLTKsdC0yOuho86qwcu3wNa5yv2+3baqyqejrM7Sw8fU2rbU1tjSqrXEyv2+3bGjtObKscq508NzeW5jaG9ybml6Zbe9t6jHv9bG0LTI66GjtavKx9Ky0qrXotLio6yyu9PDxrW3sbXEyrnTw3N5bmNob3JuaXplo6zV4tH5sc++udOwz+zQ1MTcus3Qp8LKo6wKCiAgICAyoaJJT1OxvrXYtOa0os671sPLtcP3CjxwPgo8L3A+Cjx0YWJsZSBib3JkZXI9"0" cellpadding="5" cellspacing="0">

      /Documents/

      您應該將所有的應用程序數據文件寫入到這個目錄下。這個目錄用於存儲用戶數據或其它應該定期備份的信息。有關如何取得這個目錄路徑的信息,請參見“獲取應用程序目錄的路徑”部分。

      iTunes會備份這個目錄的內容。

      /Library/Preferences

      這個目錄包含應用程序的偏好設置文件。您不應該直接創建偏好設置文件,而是應該使用NSUserDefaults類或CFPreferences API來取得和設置應用程序的偏好,詳情請參見“添加Settings程序包”部分。

      iTunes會備份這個目錄的內容。

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved