1. 程式人生 > >iOS 資料持久化之使用NSUserDefaults儲存資料

iOS 資料持久化之使用NSUserDefaults儲存資料

iOS下可以使用NSUserDefaults、sqlite、CoreData幾種常用的方式來儲存資料,其中NSUserDefaults用來儲存類似使用者的配置等這些的資料,後兩者使用者儲存大批量和比較複雜的資料。NSUserDefault的使用比較簡單:
NSUserDefaults *mySettingData = [NSUserDefaults standardUserDefaults];

建立NSUserDefaults物件之後即可往裡面新增資料,它支援的資料型別有NSString、 NSNumber、NSDate、 NSArray、NSDictionary、BOOL、NSInteger、NSFloat等系統定義的資料型別,如果要存放自定義的物件(如自定義的類物件),則必須將其轉換成NSData儲存:

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中的資料:
NSUserDefaults *mySettingDataR = [NSUserDefaults standardUserDefaults];

NSLog(@"arrItem=%@", [mySettingDataR objectForKey:@"arrItem"]);
NSLog(@"user_name=%@", [mySettingDataR objectForKey:@"user_name"]);
NSLog(@"count=%d", [mySettingDataR integerForKey:@"count"]);

如果想刪除某個資料項,可以使用removeObjectForKey刪除資料:

[mySettingData removeObjectForKey:@"arrItem"];
需要注意的是,NSUserDefaults是定時把快取中的資料寫入磁碟的,而不是即時寫入,為了防止在寫完NSUserDefaults後程序退出導致的資料丟失,可以在寫入資料後使用synchronize強制立即將資料寫入磁碟:
[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開啟該檔案,可以看到剛才寫入的資料。