国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

iOS開發,你不得不知的數據存儲---干貨

2019-11-14 18:26:09
字體:
來源:轉載
供稿:網友

1、偏好設置—多用于用戶名、是否自動登錄等數據存儲

很多iOS應用都支持偏好設置,比如保存用戶名、密碼、字體大小等設置,iOS提供了一套標準的解決方案來為應用加入偏好設置功能

每個應用都有個NSUserDefaults實例(有切僅有一個),通過它來存取偏好設置,比如,保存用戶名、字體大小、是否自動登錄

(1)保存內容設置

1 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
// 將用戶名存儲
2 [defaults setObject:@"JFCK" forKey:@"username"];
// 將字體尺寸儲存
3 [defaults setFloat:18.0f forKey:@"text_size"]; 

(2)讀取上次保存的設置

1 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];2 // 讀取username這個key的值3 NSString *username = [defaults stringForKey:@"username"];4 // 讀取text_size這個key的值
5 float textSize = [defaults floatForKey:@"text_size"];
6 // 讀取auto_login這個key的值
7 BOOL autoLogin = [defaults boolForKey:@"auto_login"];

(3)注意:UserDefaults設置數據時,不是立即寫入,而是根據時間戳定時地把緩存中的數據寫入本地磁盤。所以調用了set方法之后數據有可能還沒有寫入磁盤應用程序就終止了。出現以上問題,可以通過調用synchornize方法強制寫入

1 [defaults synchornize];

 

2、plist存儲—字典、數組存儲

(1) 數據儲存:

 

    1】獲取Cache文件路徑:

 

    // 獲取Cache文件路徑

 

    // NSSearchPathDirectory:搜索的目錄

 

    // NSSearchPathDomainMask:搜索范圍 NSUserDomainMask:表示在用戶的手機上查找

 

    // expandTilde 是否展開全路徑,如果沒有展開,應用的沙盒路徑就是~

 

    // 存儲一定要要展開路徑

 

    NSString *cachePaht = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];

 

 

   2】拼接文件名:

 

    NSString *filePath = [cachePaht stringByAppendingPathComponent:@"Arr.plist"];

 

   3】將信息寫入文件:

 

    // File:文件的全路徑 

 

     [arr writeToFile:filePath atomically:YES];

 

示例:

 

 1 - (void)saver { 2     // 如何判斷一個對象能不能使用Plist,就看下有沒有writeToFile 3     NSArray *arr = @[@"123",@1]; 4     // 獲取Cache文件路徑 5     // NSSearchPathDirectory:搜索的目錄 6     // NSSearchPathDomainMask:搜索范圍 NSUserDomainMask:表示在用戶的手機上查找 7    // expandTilde 是否展開全路徑,如果沒有展開,應用的沙盒路徑就是~ 8    // 存儲一定要要展開路徑 9    NSString *cachePaht = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];10    // 拼接文件名11   NSString *filePath = [cachePaht stringByAppendingPathComponent:@"Arr.plist"];12    // File:文件的全路徑13    [arr writeToFile:filePath atomically:YES];14

 

 

 

數據讀取:

 

1 - (void)read {2   // 獲取Cache文件路徑3    NSString *cachePaht = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];4   // 拼接文件名5   NSString *filePath = [cachePaht stringByAppendingPathComponent:@"arr.plist"];6   NSArray *arr = [NSArray arrayWithContentsOfFile:filePath];7   NSLog(@"%@",arr);8 }

 

3、NSKeyedArchiver歸檔解檔(NSCoding)

如果對象是NSStringNSDictionaryNSArrayNSDataNSNumber等類型,可以直接用NSKeyedArchiver進行歸檔和恢復;

不是所有的對象都可以直接用這種方法進行歸檔,只有遵守了NSCoding協議的對象才可以。

NSCoding協議有2個方法

1encodeWithCoder:

每次歸檔對象時,都會調用這個方法。一般在這個方法里面指定如何歸檔對象中的每個實例變量,可以使用encodeObject:forKey:方法歸檔實例變量。

2initWithCoder:

每次從文件中恢復(解碼)對象時,都會調用這個方法。一般在這個方法里面指定如何解碼文件中的數據為對象的實例變量,可以使用decodeObject:forKey方法解碼實例變量。

完整實例:存取聯系人的名字、電話號碼信息數據:

1、在數據模型的頭文件中正常定義屬性和聲明類方法(實例化對象的方法)

 1 #import <Foundation/Foundation.h> 2  3 @interface ICKContact : NSObject<NSCoding> 4  5 @PRoperty (nonatomic, strong) NSString *name; 6  7 @property (nonatomic, strong) NSString *phone; 8  9 + (instancetype)contactWithName:(NSString *)name andPhone:(NSString *)phone;10 11 @end

2、在數據模型的實現文件中,除了實現實例化對象的類方法以外,還需從新實現實例化對象的對象方法和存儲屬性的方法:

 1 #import "ICKContact.h" 2  3 @implementation ICKContact 4 // 實例化數據模型方法 5 + (instancetype)contactWithName:(NSString *)name andPhone:(NSString *)phone 6 { 7     ICKContact *contact = [[ICKContact alloc] init]; 8     contact.name = name; 9     contact.phone = phone;10     return contact;11 }12 // 遵守歸檔協議需調用的方法13 - (void)encodeWithCoder:(NSCoder *)aCoder14 {15     [aCoder encodeObject:self.name forKey:@"name"];16     [aCoder encodeObject:self.phone forKey:@"phone"];17 }18 19 // 遵守歸檔協議需調用的方法20 - (instancetype)initWithCoder:(NSCoder *)aDecoder21 {22 // super是否也實現(initWithCoder:aDecoder)方法,取決于父類super是否也遵守了NSCoding協議23     if (self = [super init]) {24         self.name = [aDecoder decodeObjectForKey:@"name"];25         self.phone = [aDecoder decodeObjectForKey:@"phone"];26     }27     return self;28 }29 30 @end

 

3、存儲數據:在需要存儲數據的文件中實現

1  // 獲取全路徑2  NSString *cache = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,   NSUserDomainMask, YES)[0];3  NSString *path = [cache stringByAppendingString:@"contacts.data"];4 // 以數組形式寫入(底層中還是以一個一個對象的形式進行存儲)5 // self.contacts :數據模型數組(此處實現就省略了)6  [NSKeyedArchiver archiveRootObject:self.contacts toFile:path];

4、獲取數據:

1 NSString *cache = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];2 NSString *path = [cache stringByAppendingString:@"contacts.data"];3  _contacts = [NSKeyedUnarchiver  unarchiveObjectWithFile:path];

 

       


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 凌海市| 高青县| 扎囊县| 清新县| 轮台县| 平定县| 铁力市| 泰顺县| 南康市| 漳州市| 惠东县| 天门市| 青海省| 黄冈市| 平遥县| 天镇县| 安图县| 讷河市| 普安县| 泰和县| 馆陶县| 辽阳市| 讷河市| 唐海县| 磐安县| 灌阳县| 高雄市| 深泽县| 新龙县| 怀化市| 黔江区| 阿坝县| 托里县| 囊谦县| 阜康市| 永城市| 田林县| 白沙| 北流市| 康平县| 芜湖县|