iOS資料持久化檔案讀寫之喜好設定,ios資料讀寫偏好
很多iOS應用都支援喜好設定,比如儲存使用者名稱、密碼、字型大小等設定,iOS提供了一套標準的解決方案來為應用加入喜好設定功能。每個應用都有個NSUserDefaults執行個體,通過它來存取喜好設定。比如,儲存使用者名稱、字型大小、是否自動登入等。NSUserDefaults 基本上支援所有的原生資料類型NSString、 NSNumber、NSDate、 NSArray、NSDictionary、BOOL、NSInteger、NSFloat等等。
1. 喜好設定簡介
大家應該記得在iOSDay35資料處理之檔案讀寫中 6> 應用程式的沙箱目錄 中寫到 Library 檔案夾下有一個檔案夾的名字叫 Preferences(偏好),用於儲存應用程式的喜好設定。當你進行喜好設定時,在這個檔案夾下就會自動建立一個與你工程名一致的plist檔案,喜好設定就儲存在這個plist檔案中。
既然它是儲存在一個plist檔案裡的,那麼它自然也就是以索引值對的方式存在的,它的儲存形式其實就是一種XML格式的檔案:
2. 喜好設定的使用 1> 儲存資料
1 // 建立 NSUserDefaults 對象用於設定喜好設定 2 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 3 4 // 設定偏好 5 [defaults setObject:@"zf" forKey:@"name"]; 6 [defaults setInteger:24 forKey:@"age"]; 7 [defaults setBool:YES forKey:@"gender"]; 8 9 // 立即同步10 [defaults synchronize];
使用喜好設定對資料進行儲存之後, 它儲存到系統的時間是不確定的,會在將來某一時間點自動將資料儲存到Preferences檔案夾下面,如果需要即刻將資料存放區,必須使用立即同步 [defaults synchronize]
在 NSUserDefaults 類中封裝了一系列的set方法用於儲存不同類型的資料
1 - (void)setInteger:(NSInteger)value forKey:(NSString *)defaultName;2 - (void)setFloat:(float)value forKey:(NSString *)defaultName;3 - (void)setDouble:(double)value forKey:(NSString *)defaultName;4 - (void)setBool:(BOOL)value forKey:(NSString *)defaultName;5 - (void)setURL:(nullable NSURL *)url forKey:(NSString *)defaultName NS_AVAILABLE(10_6, 4_0);
2> 讀取資料
1 // 讀取資料2 NSString *name = [defaults objectForKey:@"name"];3 int age = (int)[defaults integerForKey:@"age"];4 BOOL gender = [defaults boolForKey:@"gender"];
列印結果
與儲存資料相同,在 NSUserDefaults 類中封裝了一系列得到資料的方法
1 - (nullable NSString *)stringForKey:(NSString *)defaultName; 2 - (nullable NSArray *)arrayForKey:(NSString *)defaultName; 3 - (nullable NSDictionary<NSString *, id> *)dictionaryForKey:(NSString *)defaultName; 4 - (nullable NSData *)dataForKey:(NSString *)defaultName; 5 - (nullable NSArray<NSString *> *)stringArrayForKey:(NSString *)defaultName; 6 - (NSInteger)integerForKey:(NSString *)defaultName; 7 - (float)floatForKey:(NSString *)defaultName; 8 - (double)doubleForKey:(NSString *)defaultName; 9 - (BOOL)boolForKey:(NSString *)defaultName;10 - (nullable NSURL *)URLForKey:(NSString *)defaultName NS_AVAILABLE(10_6, 4_0);
3> 刪除資料
1 // 刪除喜好設定2 [defaults removeObjectForKey:@"name"];3 [defaults removeObjectForKey:@"age"];4 [defaults removeObjectForKey:@"gender"];
使用注意:喜好設定是專門用來儲存應用程式的配置資訊的, 一般情況不要在喜好設定中儲存其他資料。如果利用系統的喜好設定來儲存資料, 預設就是儲存在Preferences檔案夾下面的,喜好設定會將所有的資料都儲存到同一個檔案中。
和基礎資料型別 (Elementary Data Type)中的NSDictionary相似,針對同一個關鍵字對應的對象或者資料,可以對它進行重寫,重寫之後關鍵字就對應新的對象或者資料,舊的對象或者資料會被自動清理。