一 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
- #import
- @interface ViewController : UIViewController
- {
- IBOutlet UILabel *txtInteger;
- IBOutlet UILabel *txtFloat;
- IBOutlet UILabel *txtDouble;
- IBOutlet UILabel *txtNSString;
- IBOutlet UILabel *txtNSDate;
- IBOutlet UILabel *txtNSArray;
- IBOutlet UILabel *txtNSDictionary;
- }
-
@end
ViewController.m文件中最重要的是兩個方法:
saveNSUserDefaults:用於將各種類型數據保存到NSUserDefaults中
readNSUserDefautls:用於從NSUserDefaults中讀取各種類型的數據。在viewDidLoad中調用這兩個方法就可以看出結果咯
[cpp] view
plaincopy- #import “ViewController.h”
- @interface ViewController ()
- @end
- @implementation ViewController
- – (void)viewDidLoad
- {
- [super viewDidLoad];
- [self saveNSUserDefaults]; //調用此方法將各種數據存儲到NSUserDefautls中,在下面定義
- [self readNSUserDefaults]; //調用此方法從NSUserDefautls中讀取各種數據,在下面定義
- }
- – (void)viewDidUnload
- {
- [txtNSString release];
- txtNSString = nil;
- [txtNSDate release];
- txtNSDate = nil;
- [txtNSArray release];
- txtNSArray = nil;
- [txtNSDictionary release];
- txtNSDictionary = nil;
- [txtInteger release];
- txtInteger = nil;
- [txtFloat release];
- txtFloat = nil;
- [txtDouble release];
- txtDouble = nil;
- [super viewDidUnload];
- // Release any retained subviews of the main view.
- }
- //保存數據到NSUserDefaults
- -(void)saveNSUserDefaults
- {
- NSString *myString = @”enuola”;
- int myInteger = 100;
- float myFloat = 50.0f;
- double myDouble = 20.0;
- NSDate *myDate = [NSDate date];
- NSArray *myArray = [NSArray arrayWithObjects:@”hello”, @”world”, nil];
- NSDictionary *myDictionary = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@”enuo”, @”20″, nil] forKeys:[NSArray arrayWithObjects:@”name”, @”age”, nil]];
- //將上述數據全部存儲到NSUserDefaults中
- NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
- //存儲時,除NSNumber類型使用對應的類型意外,其他的都是使用setObject:forKey:
- [userDefaults setInteger:myInteger forKey:@”myInteger”];
- [userDefaults setFloat:myFloat forKey:@”myFloat”];
- [userDefaults setDouble:myDouble forKey:@”myDouble”];
- [userDefaults setObject:myString forKey:@”myString”];
- [userDefaults setObject:myDate forKey:@”myDate”];
- [userDefaults setObject:myArray forKey:@”myArray”];
- [userDefaults setObject:myDictionary forKey:@”myDictionary”];
- //這裡建議同步存儲到磁盤中,但是不是必須的
- [userDefaults synchronize];
- }
- //從NSUserDefaults中讀取數據
- -(void)readNSUserDefaults
- {
- NSUserDefaults *userDefaultes = [NSUserDefaults standardUserDefaults];
- //讀取數據到各個label中
- //讀取整型int類型的數據
- NSInteger myInteger = [userDefaultes integerForKey:@”myInteger”];
- txtInteger.text = [NSString stringWithFormat:@”%d”,myInteger];
- //讀取浮點型float類型的數據
- float myFloat = [userDefaultes floatForKey:@”myFloat”];
- txtFloat.text = [NSString stringWithFormat:@”%f”,myFloat];
- //讀取double類型的數據
- double myDouble = [userDefaultes doubleForKey:@”myDouble”];
- txtDouble.text = [NSString stringWithFormat:@”%f”,myDouble];
- //讀取NSString類型的數據
- NSString *myString = [userDefaultes stringForKey:@”myString”];
- txtNSString.text = myString;
- //讀取NSDate日期類型的數據
- NSDate *myDate = [userDefaultes valueForKey:@”myDate”];
- NSDateFormatter *df = [[NSDateFormatter alloc] init];
- [df setDateFormat:@”yyyy-MM-dd HH:mm:ss”];
- txtNSDate.text = [NSString stringWithFormat:@”%@”,[df stringFromDate:myDate]];
- //讀取數組NSArray類型的數據
- NSArray *myArray = [userDefaultes arrayForKey:@”myArray”];
- NSString *myArrayString = [[NSString alloc] init];
- for(NSString *str in myArray)
- {
- NSLog(@”str= %@”,str);
- myArrayString = [NSString stringWithFormat:@”%@ %@”, myArrayString, str];
- [myArrayString stringByAppendingString:str];
- // [myArrayString stringByAppendingFormat:@”%@”,str];
- NSLog(@”myArrayString=%@”,myArrayString);
- }
- txtNSArray.text = myArrayString;
- //讀取字典類型NSDictionary類型的數據
- NSDictionary *myDictionary = [userDefaultes dictionaryForKey:@”myDictionary”];
-
NSString *myDicString = [NSString stringWithFormat:@”name:%@, age:%d”,
[myDictionary valueForKey:@”name”], [[myDictionary valueForKey:@”age”] integerValue]]; - txtNSDictionary.text = myDicString;
- }
-
@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會備份這個目錄的內容。