plist檔案、NSUserDefault 對檔案進行儲存的類、json格式解析,nsuserdefaultjson

來源:互聯網
上載者:User

plist檔案、NSUserDefault 對檔案進行儲存的類、json格式解析,nsuserdefaultjson

==========================

檔案操作

==========================

Δ一 .plist檔案

.plist檔案是一個屬性字典數組的一個檔案;

.plist檔案可以用來儲存:字典、數組、字串等對象資料,可以混搭儲存

 

【注】iOS開發中,plist檔案一般用於app的配置資訊

【注】ios開發工程中,允許多個plist檔案共存。

【注】plist檔案用來儲存小資料量的資料

優點:可視化以及可編輯性非常方便

plist檔案的操作

         // 例如

        NSString* str = @"我是\"美國人\"\n,我愛\"美國\"";

        NSLog(@"%@",str);

 1.建立plist檔案

        NSMutableDictionary* dic = [[NSMutableDictionary alloc]init];

 

        [dic setObject: @"張三" forKey: @"name"];

        [dic setObject: @"李四" forKey: @"name1"];

        [dic  setObject: @"王二" forKey: @"name2"];

        

        //【注】如果key相同,資料會被衝掉

        [dic setObject: @"zhangsan" forKey: @"name"];

        

        // 把資料寫入檔案

        //【瞭解】atomically

        // atomically:參數意思,原子操作

        // 如果atomically的參數是yes,程式會把資料先備份一下,等全部寫入到了緩衝中再一次性寫入檔案

        // 如果atomically的參數是no,程式會直接把資料寫入緩衝

        [dic writeToFile:Path atomically:YES];

2.建立一種多索引值的plist檔案

        

        NSMutableDictionary* plugin1 = [[NSMutableDictionary alloc]init];

        [plugin1 setObject: @"張三1" forKey: @"name1"];

        [plugin1 setObject: @"李四" forKey: @"name2"];

        

        NSMutableDictionary* plugin2 = [[NSMutableDictionary alloc]init];

        

        [plugin2 setObject: @"王二" forKey: @"name1"];

        [plugin2 setObject: @"趙五" forKey: @"name2"];

       

        NSMutableDictionary* listDic = [[NSMutableDictionary alloc]init];

        [listDic setObject:plugin1 forKey: @"初中一班"];

        [listDic setObject:plugin2 forKey: @"初中二班"];

        

        [listDic setObject: @"一哥" forKey: @"name"];

        

        [listDic writeToFile:Path atomically:YES];

        

3.對某一個屬性進行修改

        //∆∆∆∆首先應該先讀取當前plist檔案,讀出所有資料

        // 讀取指定目錄下的檔案內容

        NSMutableDictionary* appList = [[NSMutableDictionary alloc]initWithContentsOfFile:Path];

        [appList setObject: @"二哥" forKey: @"name"];     

        NSMutableDictionary* chu1 = [appList objectForKey: @"初中一班"];

        NSString* name1 = [chu1 objectForKey: @"name1"]; 

        [[appList objectForKey: @"初中一班"] objectForKey: @"name1"];    

        // 通過取出的內容,重新組合一個新的內容,把新的內容資料重新存入plist中

        [chu1 setObject:@"qianfeng" forKey: @"name1"];

        [appList setObject:chu1 forKey: @"初中一班"]; 

        [appList writeToFile:Path atomically:YES];

 

【總結】

1.plist檔案操作其實就是一個根目錄是字典,內部資料各種嵌套操作。

2.如果想要修改plist中的某個欄位內容,一層一層去找,找到後一層一層封裝回來,重新寫入檔案。(檔案的覆蓋過程)

3.plist不允許出現key值重名,如果重名,會把之前的名稱下的值給衝掉。

 

二.NSUserDefault 對檔案進行儲存的類

1. NSUserDefault是一個本機資料儲存類,可以儲存小資料量的資訊。

2. NSUserDefault 在iOS中常用來儲存使用者的個人資訊,以及登陸註冊資訊。

 

【注】到目前為止,大家所學的歸檔、寫檔案、NSUserDefault都是儲存小資料量資訊的類,他們可以儲存大資料量但是會出現效能問題。儲存大資料量資訊用【資料庫】

【資料庫】

1.SQlite 底層的資料,需要自己手動去建立資料庫檔案(db),並且需要手動去書寫sqlite 語句;

2.【core data】是蘋果公司提供的一種資料庫儲存、查詢、修改、刪除等操作一種解決方案;core data資料庫其實就是一個對sqlit3進行封裝的類庫。

3.第三方資料庫。 

Δ【學習NSUserDefault】

   // userDefault Demo

        // NSUserDefaults 是一個單例類,調用單例方法

        NSUserDefaults* defaul = [NSUserDefaults standardUserDefaults];

        

        // 設定key和value

        [defaul setObject: @"15588605664" forKey: @"userName"]; 

        [defaul setObject: @"123456" forKey: @"password"];

 

        NSArray* classInfo = @[@"初中一班", @"66個同學", @"平均成績99.98", @{@"key":@"value"}];

        [defaul setObject:classInfo forKey: @"clss_Info"]; 

 

       [defaul setObject: @"1" forKey: @"status"];

        [defaul setBool:YES forKey: @"status"];

        [defaul setInteger:1 forKey: @"int"];

        [defaul setObject:[NSNumber numberWithBool:YES] forKey: @"status1"];

        [defaul setFloat:0.15 forKey: @"float"];

        

        //   把剛才設定的內容儲存到程式給NSUserDefaults所分配的空間檔案中

        //   系統會把NSUserDefaults儲存的檔案都放到app的一個指定的目錄,其實這個目錄就是在根目錄的library目錄下一個新的目錄下

        // ∆∆∆∆[注]synchronize 一定要寫這個方法,可以確保資料萬無一失,如果不寫這個方法,可能會存在資料沒有儲存成功的情況,例如在多線程中進行資料儲存;

        [defaul synchronize];

        // =================================

        // 讀取檔案的方式

        

        NSString* userName = [defaul objectForKey: @"userName"];

        NSString* pwd = [defaul objectForKey: @"password"];

        // 只要是牽扯到key和value的,那麼儲存的時候key怎麼寫,取的時候,key必須怎麼寫

        // 只要是牽扯到key和value的,那麼儲存的key如果一樣,肯定會發生覆蓋

        NSArray* ClassAllInfo = [defaul objectForKey: @"clss_Info"];

        

        BOOL isok = [defaul objectForKey: @"status"];

        

        float f1 = [defaul floatForKey: @"float"];

        NSInteger i = [defaul integerForKey: @"int"];

        BOOL b = [defaul boolForKey: @"status"];

        

        NSLog(@"使用者的登陸資訊是:\n%@\n%@", userName, pwd);

        NSLog(@"%@",ClassAllInfo);

【注】NSUserDefault 可以儲存的資料類型有:NSNumber(NSInterger、flost、double),NSDictionary,NSArray、Bool,NSString這些資料類型

 

Δ.【擴充知識— c語言 逸出字元】

逸出字元就是用來解決程式中的一些特殊符號導致編碼出錯的問題。比如:

【注】對要進行轉義的字元每個前面都要寫 \

1.‘

2.“

3. 斷行符號

4.等等非常多

 

【擴充】

1.編程中檔案的命名最好不要有中文、空格、特殊符號(因為電腦會對中文或者空格或者特殊符號進行轉義)

2.檔案和記憶體資料之間的轉換關係

 

cpu(電腦處理資料大腦)所有的資料都是按照cpu的指令去調度執行

 

本地檔案——>記憶體           (讀的過程)

記憶體      ——>本地檔案     (寫的過程)

【注】代碼中定義的變數或者物件變數,這些變數的內容都是在記憶體中儲存運算。如果想把一些有用的資訊持續保留,就需要把資訊儲存到檔案中。

 

(1).記憶體中的資料,都是一些臨時資料,當電腦發生意外情況(斷電),記憶體中的資料都會消失;

(2).把記憶體中的輸入寫入到檔案中,就可以永久儲存,只要檔案沒有被刪除。

 

三.json格式解析

1.json

2.xml

【比較】xml格式出現的比json格式早,xml就是表單(表格)(<body>name</body>),xml最致命的缺點就是可閱讀性不高,導致程式員解析比較麻煩。xml優點是應用到大資料量。但是,隨著移動端的興起,json這種格式也開始流行。逐漸成為ios平台和安卓平台app端擷取資料一種格式。json格式優點:格式清晰,應用於小資料量的擷取。

 // 例如

#import <Foundation/Foundation.h>

#import "MyModel.h"

#import "UserModel.h"

 

#define PATH @"http://m2.qiushibaike.com/article/list/latest?page=1&count=30&rqcnt=21&r=a1ef5f561429944164282"

 

int main(int argc, const char * argv[]) {

    @autoreleasepool {

        // 協議很多種:http  ftp  mail  file socket xmpp

        // url格式:  協議://網域名稱(ip地址):連接埠/路徑 ?參數列表(以&符間隔每個參數)

         // 將字串轉換成NSURL類型

        NSURL *url = [NSURL URLWithString:PATH];

        // 通過url擷取資料

         // NSData *data1 = [[NSData alloc] initWithContentsOfFile: @""];

        NSData *data = [[NSData alloc] initWithContentsOfURL:url];

        //  NSLog(@"%@",data);

        

        NSError *error = nil;

        // NSJSONSerialization蘋果系統內建解析,此方法是把data解析成NSDictionary 操作讀取可變內容

        NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];

        if (error) {

            NSLog(@"解析失敗");

            exit(-1);

        }

        

        NSLog(@"%@",dic);

        NSArray *array = [dic objectForKey:@"items"];

        //  NSLog(@"%@",array);

        

        // 建立一個可變數組用於存放myModel這個模型

        NSMutableArray *dataArray = [[NSMutableArray alloc] init];

        

        for (int i = 0; i < array.count; i++) {

            

            MyModel *myModel = [[MyModel alloc] init];

            NSDictionary *dicItem = array[i];

            // 這裡的key一定要對應url返回來欄位值

            myModel.content = [dicItem objectForKey: @"content"];

            myModel.modelId = [dicItem objectForKey: @"id"];           

            if (![[dicItem objectForKey:@"user"] isMemberOfClass:[NSNull class]] ) {

                NSDictionary *userDic = [dicItem objectForKey: @"user"];

                UserModel *userModel = [[UserModel alloc] init];

                //  NSLog(@"%@",[userDic objectForKey: @"avatar_updated_at"]);

                userModel.avatar_updated_at = [userDic objectForKey: @"avatar_updated_at"];

                userModel.created_at = [userDic objectForKey: @"created_at"];

                userModel.last_device = [userDic objectForKey: @"last_device"];

                myModel.user = userModel;

 

            }

            [dataArray addObject:myModel];

        }

        

        //  NSLog(@"可變數組個數:%lu",dataArray.count);

 

        for (MyModel *myModel in dataArray) {

            NSLog(@"content:%@,modelId:%@", myModel.content, myModel.modelId);

            UserModel *userModel = myModel.user;

            NSLog(@"更新時間:%@,建立時間:%@,最終裝置:           %@",  userModel.avatar_updated_at, userModel.created_at,  userModel.last_device);

        }

    }

    return 0;

}

 

#import <Foundation/Foundation.h>

#import "UserModel.h"

 

@interface MyModel : NSObject

@property (nonatomic,copy) NSString *content;

@property (nonatomic,copy) NSString *modelId;

@property (nonatomic,strong) UserModel *user;

@end

 

#import <Foundation/Foundation.h>

 

@interface UserModel : NSObject

@property (nonatomic,copy) NSString *avatar_updated_at;

@property (nonatomic,copy) NSString *created_at;

@property (nonatomic,copy) NSString *last_device;

 @end

【注】可以利用http://www.bejson.com/     對json格式進行校正並規整。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.