iOS 數(shù)據(jù)存儲(chǔ)


1.plist文件存儲(chǔ)

  • iOS中手機(jī)應(yīng)用數(shù)據(jù)存儲(chǔ)是保存在手機(jī)里的應(yīng)用沙盒中的
  • plist文件存儲(chǔ)一般都是存取字典和數(shù)組,直接寫成plist文件,把它存到應(yīng)用沙盒當(dāng)中.
  • 只有在iOS當(dāng)中才有plist存儲(chǔ),它是ios特有的存儲(chǔ)方式.
存數(shù)據(jù)
- (IBAction)save:(id)sender {
- 
    獲取沙盒根根路徑
    NSString *homeDir = NSHomeDirectory();
   
    在某個(gè)范圍內(nèi)搜索文件夾的路徑.
    directory:獲取哪個(gè)文件夾
    domainMask:在哪個(gè)路徑下搜索
    expandTilde:是否展開路徑.
    這個(gè)方法獲取出的結(jié)果是一個(gè)數(shù)組.因?yàn)橛锌梢运阉鞯蕉鄠€(gè)路徑.
    
    NSArray *array =  NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    
    在這里,我們指定搜索的是Cache目錄,所以結(jié)果只有一個(gè),取出Cache目錄 NSString *cachePath = array[0];
    拼接文件路徑
    NSString *filePathName = [cachePath stringByAppendingPathComponent:@"agePlist.plist"];
    
    想要把這個(gè)字典存儲(chǔ)為plist文件.
    直接把字典寫入到沙盒當(dāng)中
    用字典寫, plist文件當(dāng)中保存的是字典.
    NSDictionary *dict = @{@"age" : @18,@"name" : @"gaowei"};
    
    獲取沙盒路徑
    ToFile:要寫入的沙盒路徑
    [dict writeToFile:filePathName atomically:YES];

    用數(shù)組寫,plist文件當(dāng)中保存的類型是數(shù)組.
    NSArray *dataArray = @[@56,@"asdfa"];
    獲取沙盒路徑
    ToFile:要寫入的沙盒路徑
    [dataArray writeToFile:filePathName atomically:YES];
  
}

讀取數(shù)據(jù)
- (IBAction)reader:(id)sender {
- 
    這個(gè)方法獲取出的結(jié)果是一個(gè)數(shù)組.因?yàn)橛锌梢运阉鞯蕉鄠€(gè)路徑.
    NSArray *array =  NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    
    在這里,我們指定搜索的是Cache目錄,所以結(jié)果只有一個(gè),取出Cache目錄
    NSString *cachePath = array[0];
    
    拼接文件路徑
    NSString *filePathName = [cachePath stringByAppendingPathComponent:@"agePlist.plist"];
   
    從文件當(dāng)中讀取字典, 保存的plist文件就是一個(gè)字典,這里直接填寫plist文件所存的路徑
    NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:filePathName];
   
    如果保存的是一個(gè)數(shù)組.那就通過數(shù)組從文件當(dāng)中加載.
    NSArray *dataArray = [NSArray arrayWithContentsOfFile:filePathName];
   
}

2.偏好設(shè)置存儲(chǔ)

  • 使用偏好設(shè)置存儲(chǔ)會(huì)將數(shù)據(jù)存儲(chǔ)到應(yīng)用沙盒的Preferences文件下,路徑為
    ~~Application/0A46AC9F-04C9-4DA2-B803-5018A979109A/Library/Preferences
  • 一般用于存儲(chǔ)應(yīng)用的一些應(yīng)用設(shè)置信息,用戶偏好設(shè)置
  // 保存用戶信息至沙盒
  NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
                
  // 設(shè)置需要寫入的數(shù)據(jù)
  [defaults setObject:self.accountTextF.text forKey:AZAccountInfo];
  [defaults setObject:self.pwdTextF.text forKey:AZPwdInfo];
  [defaults setBool:self.remPwdSwitch.isOn forKey:AZRemInfo];
  [defaults setBool:self.autoLoginSwitch.isOn forKey:AZAutoLoginInfo];
            
  // 立即寫入文件
  [defaults synchronize];
  • 取出數(shù)據(jù)
  // 從沙盒中取出用戶保存的設(shè)置
    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
    
  // 通過用戶保存的設(shè)置進(jìn)行相應(yīng)的設(shè)置
    self.remPwdSwitch.on=[defaults boolForKey:AZRemInfo];
    

3.歸檔

  • 歸檔一般用于保存自定義的對象
    //獲取沙盒臨時(shí)目錄
    NSString *tempPath = NSTemporaryDirectory();
    NSString *filePath = [tempPath stringByAppendingPathComponent:@"persion.data"]; 
     // 寫入數(shù)據(jù)
    [NSKeyedArchiver archiveRootObject:self.contactorArray toFile:filePath];
    
  • archiveRootObject這個(gè)方法底層會(huì)去調(diào)用保存對象的encodeWithCoder方法,去詢問要保存這個(gè)對象的哪些屬性.所以要實(shí)現(xiàn)encodeWithCoder方法, 告訴其要保存這個(gè)對象的哪些屬性.
  • encodeWithCoder方法在NSCoding文件中,如果文件父類是NSObject,還需要繼承NSCoding @interface AZContactor : NSObject<NSCoding>
// 編碼
- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:self.contactName forKey:@"name"];
    [aCoder encodeObject:self.phoneNum forKey:@"num"];
}

  • 可以將文件沙盒路徑抽成宏,這樣在文件的存取過程中就不會(huì)那么容易出錯(cuò)
#define AZDataPath [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"contactor.data"]

  • 取出數(shù)據(jù):unarchiveObjectWithFile:方法中,系統(tǒng)在底層會(huì)去調(diào)用-(instancetype)initWithCoder:(NSCoder *)aDecoder方法進(jìn)行解碼,需要重寫這個(gè)方法對數(shù)據(jù)進(jìn)行解析
// 解碼
-(instancetype)initWithCoder:(NSCoder *)aDecoder
{
    if (self=[super init]) {
        self.contactName=[aDecoder decodeObjectForKey:@"name"];
        self.phoneNum=[aDecoder decodeObjectForKey:@"num"];
    }
    return self;
}

// 取出數(shù)據(jù)
 NSMutableArray *data=[NSKeyedUnarchiver unarchiveObjectWithFile:AZDataPath];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • iOS應(yīng)用數(shù)據(jù)存儲(chǔ)的常用方式 XML屬性列表(plist)歸檔2.Preference(偏好設(shè)置)3.NSKeye...
    清風(fēng)沐沐閱讀 404評論 0 1
  • iOS數(shù)據(jù)存儲(chǔ) 持久化存儲(chǔ) 概述: 持久化存儲(chǔ)——將數(shù)據(jù)保存在硬盤里,當(dāng)應(yīng)用程序重啟后可以訪問到之前存儲(chǔ)的數(shù)據(jù)。是...
    夏天的風(fēng)_song閱讀 685評論 1 7
  • iOS開發(fā)中本地存儲(chǔ)主要有四種形式 屬性列表(plist 文件) 偏好設(shè)置 (NSUserDefault) NSK...
    鄉(xiāng)水情緣閱讀 1,158評論 0 1
  • 數(shù)據(jù)存儲(chǔ) iOS應(yīng)用數(shù)據(jù)存儲(chǔ)的常用方式 - XML屬性列表(plist)歸檔 - Preference(偏好設(shè)置)...
    Hevin_Chen閱讀 261評論 0 0
  • 法書萬卷,法典千條,頭緒紛繁,莫可究詰,然一言以蔽之,其所研究和所規(guī)定者,不外法律關(guān)系而已。--鄭玉波 對文字不敏...
    來自b12的金小笨閱讀 575評論 0 0

友情鏈接更多精彩內(nèi)容