iOS 資料持久化之使用NSUserDefaults儲存資料
阿新 • • 發佈:2019-02-16
iOS下可以使用NSUserDefaults、sqlite、CoreData幾種常用的方式來儲存資料,其中NSUserDefaults用來儲存類似使用者的配置等這些的資料,後兩者使用者儲存大批量和比較複雜的資料。NSUserDefault的使用比較簡單:
往NSUserDefaults新增資料後,它們就變成了全域性的變數,App中即可讀寫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開啟該檔案,可以看到剛才寫入的資料。