iOS 資料持久化之使用NSUserDefaults儲存資料
1.用處:NSUserDefaults用來儲存類似使用者的配置、程式設定資訊等這些的資料
iOS下可以使用NSUserDefault、NSKeyedArchiver、sqlite、CoreData幾種常用的方式來儲存資料,其中NSUserDefaults用來儲存類似使用者的配置等這些的資料,後兩者使用者儲存大批量和比較複雜的資料。
NSUserDefault 基本上支援所有的原生資料類型NSString、 NSNumber、NSDate、 NSArray、NSDictionary、BOOL、NSInteger、NSFloat等等。如果要存放自訂的對象(如自訂的類對象),則必須將其轉換成NSData儲存。
2.用法:
NSUserDefault的使用比較簡單:
A類頁面:
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
[userDefault setObject:@“北京” forKey:LASTCITY];
[userDefault synchronize];
B類頁面:
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
NSString *lastCity = [userDefault objectForKey:LASTCITY];
3.細節用法:
如果要存放自訂的對象(如自訂的類對象),則必須將其轉換成NSData儲存:
[cpp]
- NSArray *arr = [[NSArray alloc] initWithObjects:@arr1, @arr2, nil]
- [mySettingData setObject:arr forKey:@arrItem];
- [mySettingData setObject:@admin forKey:@user_name];
- [mySettingData setBOOL:@YES forKey:@auto_login];
- [mySettingData setInteger:1 forKey:@count];
往NSUserDefaults添加資料後,它們就變成了全域的變數,App中即可讀寫NSUserDefault中的資料:
[cpp]
- NSUserDefaults *mySettingDataR = [NSUserDefaults standardUserDefaults];
- NSLog(@arrItem=%@, [mySettingDataR objectForKey:@arrItem]);
- NSLog(@user_name=%@, [mySettingDataR objectForKey:@user_name]);
- NSLog(@count=%d, [mySettingDataR integerForKey:@count]);
如果想刪除某個資料項目,可以使用removeObjectForKey刪除資料:
[cpp]
- [mySettingData removeObjectForKey:@arrItem];
需要注意的是,NSUserDefaults是定時把緩衝中的資料寫入磁碟的,而不是即時寫入,為了防止在寫完NSUserDefaults後程式退出導致的資料丟失,可以在寫入資料後使用synchronize強制立即將資料寫入磁碟:
[cpp]
- [mySettingData synchronize]; 運行上面的語句後,NSUserDefaults中的資料即被寫入到.plist檔案中,如果是在模擬器上運行程式,可以在Mac的/Users/YOUR-USERNAME/Library/Application Support/iPhone Simulator/4.1/Applications/YOUR-APP-DIR/Library/Prefereces目錄下面找到一個檔案名稱為YOUR-Bundle_Identifier.plist的plist檔案,用Xcode開啟該檔案,可以看到剛才寫入的資料。
4、針對同一個關鍵字對應的對象或者資料,可以對它進行重寫,重寫之後關鍵字就對應新的對象或者資料,舊的對象或者資料會被自動清理。