中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

Foundation框架(6)數據處理對象

本部分介紹Foundation框架中用于數據處理的各種對象

目前創新互聯建站已為近1000家的企業提供了網站建設、域名、虛擬空間、綿陽服務器托管、企業網站設計、城關網站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協力一起成長,共同發展。

包括:

    文件管理對象

    文件操作對象

    數據緩存對象

    JSON序列化工具對象

    XML序列化工具對象

  • 文件管理對象NSFileManager

NSFileManager提供了大量的接口幫助我們管理文件系統,如創建、刪除、重命名文件等。

使用單例設計模式,獲取唯一對象的方法:

+ (NSFileManager *)defaultManager

文件/文件夾創建:

//創建文件
- (BOOL)createFileAtPath:(NSString *)path contents:(NSData *)contents attributes:(NSDictionary<NSString *,id> *)attributes
//創建目錄
- (BOOL)createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates attributes:(NSDictionary<NSString *,id> *)attributeserror:(NSError * _Nullable *)error
//創建目錄
- (BOOL)createDirectoryAtURL:(NSURL *)url withIntermediateDirectories:(BOOL)createIntermediates attributes:(NSDictionary<NSString *,id> *)attributeserror:(NSError * _Nullable *)error

刪除:

- (BOOL)removeItemAtURL:(NSURL *)URL error:(NSError * _Nullable *)error
- (BOOL)removeItemAtPath:(NSString *)path error:(NSError * _Nullable *)error

存在性判斷:     

- (BOOL)fileExistsAtPath:(NSString *)path
- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory

NSFileManager還可以進行:

    文件權限的判斷、修改

    文件的移動、拷貝

    鏈接的創建

  • 文件操作類NSFileHandle

NSFileHandle提供了底層文件操作的封裝,能夠方便對文件進行讀寫操作

打開文件:

+ (instancetype)fileHandleForReadingAtPath:(NSString *)path
+ (instancetype)fileHandleForWritingAtPath:(NSString *)path
+ (instancetype)fileHandleForUpdatingAtPath:(NSString *)path
...

關閉文件:

- (void)closeFile

讀寫:

- (NSData *)readDataOfLength:(NSUInteger)length
- (NSData *)readDataToEndOfFile
- (void)writeData:(NSData *)data

偏移量定位:

- (void)seekToFileOffset:(unsigned long long)offset
- (unsigned long long)seekToEndOfFile
@property(readonly) unsigned long long offsetInFile

  • 數據緩存對象NSData

NSData用于描述數據,也被稱作“緩沖區對象”

通常從網絡、文件、設備獲得數據都是NSData類型的

+ (instancetype)dataWithContentsOfFile:(NSString *)path
+ (instancetype)dataWithContentsOfURL:(NSURL *)aURL     
+ (instancetype)dataWithBytes:(const void *)bytes length:(NSUInteger)length

常用操作:

@property(readonly) NSUInteger length
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)atomically
- (BOOL)writeToURL:(NSURL *)aURL atomically:(BOOL)atomically

Foundation框架中的很多其他類,都提供了由NSData創建的方法,如:     

- (instancetype)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding //字符串對象

  • JSON序列化工具類

什么是JSON?

     輕量級的數據交換格式,正逐步取代XML,成為網絡數據的通用格式。

     基于Javascript的一個子集

     易讀性略差,編碼手寫難度大,數據量小

JSON的格式說明

     對象:{}

     {key1:value1, key2:value2, …}的鍵值對形式,可以反序列化為OC中的NSDictionary

     數組:[]

     [“hello”, “world”, “neusoft”, …] 可以反序列化的OC的NSArray

     提示:JSON數據格式與OC中的快捷包裝方法非常類似,JSON同樣支持嵌套

iOS5之前,OC本身是不支持JSON解析的,使用第三方庫進行解析,如:SBJson、JSONKit、TouchJson。

在iOS5開始,使用NSJSONSerialization對Json進行解析。

JSON的解析---反序列化

NSJSONSerialization的類方法用于解析JSON數據。

+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError * _Nullable *)error

       解析的數據要求是NSData對象,opt是一個枚舉類型:

          NSJSONReadingMutableContainers:外層為可變對象

          NSJSONReadingMutableLeaves:葉子節點為可變對象,如解析后的葉子端的字符串是可變的(和文檔中寫的不一樣,不好用)

          NSJSONReadingAllowFragments:允許最外層,可以不是NSArray、NSDictionary,但必須是有效的JSON Fragment,如@”123”。

          0:是效率最高的一種方式,生成的都是不可變的對象

JSON的封裝---序列化

NSJSONSerialization的類方法用于封裝JSON數據

+ (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError * _Nullable *)error

     返回的是JSON格式的數據,通過NSData對象方法寫入文件或發送到網絡中。

  • XML序列化工具

XML格式介紹

     純文本文檔、區分大小寫、標記之間的數據為字符數據

     有且僅有一個根元素、每個元素必須有開始和結束,屬性值需要使用雙引號或單引號

    Foundation框架(6)數據處理對象     

XML解析的方法

     SAX,即simple API for XML,只能讀不能修改,解析速度快,常用大量數據的XML在不同的平臺系統上解析

     DOM,即Document Object Model,不僅能讀還能修改,接續速度慢,適合解析小型文檔。

     Cocoa中提供了NSXMLParser解析器類,使用SAX解析方法。

XML解析的過程

     實例化NSXMLParser解析器對象,將XML數據傳入

     定義解析器的代理(控制器或代理類)

     解析器解析

     通過解析代理方法完成XML數據的解析

NSXMLParser的實例方法

- (instancetype) initWithContentsOfURL:(NSURL*) url;
- (instancetype) initWithData:(NSData*) data;

     

NSXMLParser的代理屬性及開始解析的方法

@property(assign) id<NSXMLParserDelegate> delegate;
- (BOOL) parse;
- (void) abortParsing;

NSXMLParser的代理方法(代理設計模式見設計模式部分)

開始解析XML文檔

- (void) parserDidStartDocument:(NSXMLParser*) parser;

開始解析某一個元素(會遍歷整個XML,識別元素節點名稱)

- (void) parser:(NSXMLParser *) parser didStartElement:(NSString*) elementName namespaceURI:(NSString*) namespaceURI qualifiedName:(NSString*)qualifiedName attributes:(NSDictionary*) attributeDict;

獲得文本節點中的數據(大數據會接受多次)

- (void) parser:(NSXMLParser*) parser foundCharacters:(NSString*) string;

結束某個節點(應存儲上一個代理方法中獲得數據)

- (void) parser:(NSXMLParser*) parser didEndElement:(NSString*) elementName namespaceURI:(NSString*) namespaceURI qualifiedName:(NSString*) qName;

解析XML文檔結束

- (void) parserDidEndDocument:(NSXMLParser *) parser;

解析出錯時

- (void) parser:(NSXMLParser*) parser parseErrorOccurred:(NSError*) parseError;

如:

#pragma mark - 開始解析
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
    if ( self.contactArray == nil ) {
        self.contactArray = [NSMutableArray array];
    }
    else {
        [self.contactArray removeAllObjects];
    }
}
#pragma mark - 開始解析某個元素
- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    NSArray * elementArray = @[@"姓名", @"ID", @"公司", @"EMAIL", @"電話", @"街道", @"城區", @"城市", @"省份"];
    if ( [elementName isEqualToString:@"聯系人"] ) {
        _tmpModel = [AMContactModel contactModel];
    }
    else if ( [elementArray containsObject:elementName] ) {
        _tmpString = [NSMutableString string];
    }
}
#pragma  mark - 獲得元素中的數據
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    [_tmpString appendString:string];
}
#pragma mark - 結束解析某個元素
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if ( [elementName isEqualToString:@"聯系人"] ) {
        [self.contactArray addObject:_tmpModel];
        _tmpModel = nil;
    }
    else if ( [elementName isEqualToString:@"姓名"] ) {
        _tmpModel.name = _tmpString;
    }
    else if ( [elementName isEqualToString:@"ID"] ) {
        _tmpModel.ID = _tmpString;
    }
    else if ( [elementName isEqualToString:@"公司"] ) {
        _tmpModel.company = _tmpString;
    }
    else if ( [elementName isEqualToString:@"EMAIL"] ) {
        _tmpModel.email = _tmpString;
    }
    else if ( [elementName isEqualToString:@"電話"] ) {
        _tmpModel.tel = _tmpString;
    }
    else if ( [elementName isEqualToString:@"街道"] ) {
        _tmpModel.address.street = _tmpString;
    }
    else if ( [elementName isEqualToString:@"城區"] ) {
        _tmpModel.address.district = _tmpString;
    }
    else if ( [elementName isEqualToString:@"城市"] ) {
        _tmpModel.address.city = _tmpString;
    }
    else if ( [elementName isEqualToString:@"省份"] ) {
        _tmpModel.address.province = _tmpString;
    }
}
#pragma mark - 結束解析
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
    if ( self.delegate && [self.delegate respondsToSelector:@selector(contactXMLController:parserFinishWithArray:)] ) {
        [self.delegate contactXMLController:self parserFinishWithArray:self.contactArray];
    }
//    for ( AMContactModel  * model in self.contactArray ) {
//        NSLog(@"%@", model);
//    }
}

標題名稱:Foundation框架(6)數據處理對象
網站URL:http://m.2m8n56k.cn/article42/jdsehc.html

成都網站建設公司_創新互聯,為您提供軟件開發網站策劃網頁設計公司網站排名網站營銷

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

h5響應式網站建設
主站蜘蛛池模板: 成人免费久久精品国产片久久影院 | 国产孕妇做受视频在线观看 | 亚洲国产第一区二区香蕉日日 | 手机在线成人精品视频网 | 欧美国产日韩在线观看 | 成人小视频免费 | 国产做国产爱免费视频 | 国产网址在线 | 国产一区二区免费播放 | 欧美日韩生活片 | 国产乱码精品一区二区三区四川人 | 亚洲欧美自拍偷拍 | 男人天堂日韩 | 国产高清精品在线 | 欧美性色欧美a在线播放 | 顶级毛片在线手机免费看 | 成年女人免费视频播放成年m | 一级做a爰片久久毛片看看 一级做a爰片久久毛片鸭王 | 2020精品极品国产色在线观看 | 亚洲精品久久久久午夜三 | 久草草视频在线观看免费高清 | xxxxaaa欧美另类 | 日韩欧美中文字幕在线视频 | 亚洲综合资源 | 日朝欧美亚洲精品 | 91香焦国产线观看看免费 | 成年人在线视频 | 国产成人高清一区二区私人 | 日韩欧美在线观看 | 国产younv真实 | 美国黑人特大一级毛片 | 91精品久久国产青草 | 欧美成人三级网站 | 国产人做人爱视频精品 | 精品国产香蕉在线播出 | 在线视频观看国产 | 精品久久免费观看 | 国产aaa级一级毛片 国产aaa毛片 | 亚洲欧美一区二区三区国产精品 | 精品国产一区二区三区四区不 | 美女视频黄视大全视频免费网址 |