日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

IOS常用代码总结 - 第三方库部分

發(fā)布時(shí)間:2025/4/14 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IOS常用代码总结 - 第三方库部分 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1 SBJson的使用


JSON是一種數(shù)據(jù)交換語(yǔ)言,和XML是同樣用途的。不過JSON的體積要比XML小,也就意味著在網(wǎng)絡(luò)傳輸中
速度會(huì)比XML更快。
這里可以看到更多關(guān)于json的資料:http://www.json.org/json-zh.html
其實(shí)說白了 JSON無(wú)非就是一種字符串的結(jié)構(gòu)。。。 那么在IPHONE開發(fā)中,使用最多的JSON解析庫(kù)就是?
SBJson。。
在這里可以得到 SBJson:http://stig.github.com/json-framework/
3.1版本及以上,它將支持ARC。下載下來后,解壓縮,然后把Class目錄下的所有文件導(dǎo)入項(xiàng)目中。

在使用SBJson時(shí)候,

<pre name="code" class="objc">#import "SBJson.h" NSString *jsonStr = @"{\"name\":\"jia\",\"age\":\"24\"}"; NSString *jsonStr2 = @"[\"1\",\"2\"]"; SBJsonParser *jsonParser = [[SBJsonParser alloc] init]; NSMutableDictionary *dict = [jsonParser objectWithString:jsonStr]; NSLog(@"%@",dict); NSMutableArray *arr = [jsonParser objectWithString:jsonStr2]; NSLog(@"%@",arr); [jsonParser release];

2 MWPhotoBrowser使用


https://github.com/mwaterfall/MWPhotoBrowser
一個(gè)可選的網(wǎng)格視圖簡(jiǎn)單的iOS照片瀏覽器,標(biāo)題和選擇。
mwphotobrowser可以通過提供uiimage對(duì)象顯示一個(gè)或多個(gè)圖像,或URL的Web圖像文件,或圖書館資產(chǎn)。

照片處理下載和緩存瀏覽器從Web照片無(wú)縫。照片可以放大和平移,和可選的標(biāo)題可以顯示(可定制)。
瀏覽器也可以用于允許用戶選擇一個(gè)或更多的照片可以使用網(wǎng)格或主視圖。

mwphotobrowser的設(shè)計(jì)是一個(gè)導(dǎo)航控制器內(nèi)。只需設(shè)置代表(必須符合mwphotobrowserdelegate)和實(shí)
施所需的2代表方法提供的圖片瀏覽器在mwphoto對(duì)象形式的數(shù)據(jù)。你可以通過提供一個(gè)uiimage對(duì)象創(chuàng)建
一個(gè)mwphoto對(duì)象,或包含一個(gè)文件的路徑,在線圖片或從資產(chǎn)庫(kù)資產(chǎn)。
mwphoto對(duì)象句柄緩存,文件管理,下載網(wǎng)頁(yè)圖片,和你不同的優(yōu)化。如果你想用你自己的數(shù)據(jù)模型來表
示的照片你可以確保你的模型符合mwphoto協(xié)議。然后你可以處理的管理緩存,下載,等等,你自己。更
多這方面的資料,可以發(fā)現(xiàn)在mwphotoprotocol。H。
看下面的代碼片斷的一個(gè)例子,如何實(shí)現(xiàn)圖片瀏覽器。也有在項(xiàng)目的一個(gè)簡(jiǎn)單的演示程序。

- (void)viewDidLoad {[super viewDidLoad];// BrowserNSMutableArray *photos = [[NSMutableArray alloc] init];NSMutableArray *thumbs = [[NSMutableArray alloc] init];MWPhoto *photo;BOOL displayActionButton = NO;BOOL displaySelectionButtons = NO;BOOL displayNavArrows = NO;BOOL enableGrid = YES;BOOL startOnGrid = NO;// Photosphoto = [MWPhoto photoWithImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"photo5" ofType:@"jpg"]]];photo.caption = @"Fireworks";[photos addObject:photo];photo = [MWPhoto photoWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"photo2" ofType:@"jpg"]]];photo.caption = @"The London Eye is a giant Ferris wheel situated on the banks of the River Thames, in London, England.";[photos addObject:photo];photo = [MWPhoto photoWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"photo3" ofType:@"jpg"]]];photo.caption = @"York Floods";[photos addObject:photo];photo = [MWPhoto photoWithImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"photo4" ofType:@"jpg"]]];photo.caption = @"Campervan";[photos addObject:photo];// Options self.photos = photos;self.thumbs = thumbs;//// Create browserMWPhotoBrowser *browser = [[MWPhotoBrowser alloc] initWithDelegate:self];browser.displayActionButton = displayActionButton;//分享按鈕,默認(rèn)是browser.displayNavArrows = displayNavArrows;//左右分頁(yè)切換,默認(rèn)否browser.displaySelectionButtons = displaySelectionButtons;//是否顯示選擇按鈕在圖片上,默認(rèn)否browser.alwaysShowControls = displaySelectionButtons;//控制條件控件 是否顯示,默認(rèn)否browser.zoomPhotosToFill = NO;//是否全屏,默認(rèn)是 #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0browser.wantsFullScreenLayout = YES;//是否全屏 #endifbrowser.enableGrid = enableGrid;//是否允許用網(wǎng)格查看所有圖片,默認(rèn)是browser.startOnGrid = startOnGrid;//是否第一張,默認(rèn)否browser.enableSwipeToDismiss = YES;[browser showNextPhotoAnimated:YES];[browser showPreviousPhotoAnimated:YES];[browser setCurrentPhotoIndex:1];browser.photoTitles = @[@"000",@"111",@"222",@"333"];//標(biāo)題// [self presentViewController:browser animated:YES completion:nil];[self.navigationController pushViewController:browser animated:NO]; }#pragma mark - MWPhotoBrowserDelegate- (NSUInteger)numberOfPhotosInPhotoBrowser:(MWPhotoBrowser *)photoBrowser {return _photos.count; }- (id )photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSUInteger)index {if (index < _photos.count)return [_photos objectAtIndex:index];return nil; }

3 iOS開發(fā)網(wǎng)絡(luò)數(shù)據(jù)之AFNetworking使用

http網(wǎng)絡(luò)庫(kù)是集XML解析,Json解析,網(wǎng)絡(luò)圖片下載,plist解析,數(shù)據(jù)流請(qǐng)求操作,上傳,下載,緩存
等網(wǎng)絡(luò)眾多功能于一身的強(qiáng)大的類庫(kù)。最新版本支持session,xctool單元測(cè)試。網(wǎng)絡(luò)獲取數(shù)據(jù)一直是手
機(jī)軟件的重中之重,如果處理的不好,會(huì)造成很差的用戶體驗(yàn)。隨著ASIHTTPRequest的停止更新,更換
網(wǎng)絡(luò)庫(kù)是必然的事情,AFNetworking就是很好的替代品。而且都是輕量級(jí),不要擔(dān)心加入太多庫(kù)會(huì)多軟
件性能有影響。
1.為什么用第三方網(wǎng)絡(luò)庫(kù)?先說如果不用網(wǎng)絡(luò)庫(kù),我曾有一次覺得什么都用蘋果原生的好,XML解析用蘋
果自帶的委托,下載圖片自己寫,如果你也有跟我一樣的經(jīng)歷,那你會(huì)發(fā)現(xiàn)自己管理起來很復(fù)雜,很容
易出錯(cuò)。而且性能不好。如果你是一個(gè)追求完美的人,那就放下你的固執(zhí),就如當(dāng)初的我一樣,嘗試一
下網(wǎng)絡(luò)庫(kù)吧。
2.為什么要用AFNetworking?第一點(diǎn),它有人更新和維護(hù),而且目前使用者很多,第二點(diǎn),還是使用者很
多,那么他的資料,文檔,demo就多,很好找遇到問題好解決。如果不用AFNetworking,還有一種
MKNetworkKit也不錯(cuò),不妨一試。
如何選擇AFNetworking版本
首先得下載AFNetworking庫(kù)文件,下載時(shí)得首先弄清楚,你將要開發(fā)的軟件兼容的最低版本是多少。
AFNetworking 2.0或者之后的版本需要xcode5.0版本并且只能為IOS6或更高的手機(jī)系統(tǒng)上運(yùn)行,如果開
發(fā)MAC程序,那么2.0版本只能在MAC OS X 10.8或者更高的版本上運(yùn)行。
AFNetworking 2.0的下載地址https://github.com/AFNetworking/AFNetworking
如果你想要兼容IOS5或MAC OS X 10.7,那你需要用最新發(fā)布的1.x版本
AFNetworking 1.x的下載地址https://github.com/AFNetworking/AFNetworking/tree/1.x
如果要兼容4.3或者M(jìn)AC OS X 10.6,需要用最新發(fā)布的0.10.x版本
AFNetworking 0.10.xhttps://github.com/AFNetworking/AFNetworking/tree/0.10.x
2013年大多數(shù)軟件兼容的最低版本為4.3,而2014年,估計(jì)大多數(shù)軟件兼容的最低版本將會(huì)是5.0甚至6.0

所以,目前最好的選擇還是1.x版本,兼容到IOS5.0。
如何通過URL獲取json數(shù)據(jù)

第一種,利用AFJSONRequestOperation,官方網(wǎng)站上給的例子:

NSString *str=[NSString stringWithFormat:@"https://alpha-api.app.net/stream/0/posts/stream/global"];NSURL *url = [NSURL URLWithString:[str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];NSURLRequest *request = [NSURLRequest requestWithURL:url];// 從URL獲取json數(shù)據(jù)AFJSONRequestOperation *operation1 = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSDictionary* JSON) {NSLog(@"獲取到的數(shù)據(jù)為:%@",JSON);} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id data) {NSLog(@"發(fā)生錯(cuò)誤!%@",error);}];[operation1 start];
第二種方法,利用AFHTTPRequestOperation 先獲取到字符串形式的數(shù)據(jù),然后轉(zhuǎn)換成json格式,將
NSString格式的數(shù)據(jù)轉(zhuǎn)換成json數(shù)據(jù),利用IOS5自帶的json解析方法:

NSString *str=[NSString stringWithFormat:@"https://alpha-api.app.net/stream/0/posts/stream/global"];NSURL *url = [NSURL URLWithString:[str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];NSURLRequest *request = [NSURLRequest requestWithURL:url];AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {NSString *html = operation.responseString;NSData* data=[html dataUsingEncoding:NSUTF8StringEncoding];id dict=[NSJSONSerialization JSONObjectWithData:data options:0 error:nil];NSLog(@"獲取到的數(shù)據(jù)為:%@",dict);}failure:^(AFHTTPRequestOperation *operation, NSError *error) {NSLog(@"發(fā)生錯(cuò)誤!%@",error);}];NSOperationQueue *queue = [[NSOperationQueue alloc] init];[queue addOperation:operation];
如果發(fā)生Error Domain=NSURLErrorDomain Code=-1000 "bad URL" UserInfo=0x14defc80?
{NSUnderlyingError=0x14deea10 "bad URL", NSLocalizedDescription=bad URL這個(gè)錯(cuò)誤,請(qǐng)檢查URL
編碼格式。有沒有進(jìn)行stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding

如何通過URL獲取圖片
異步獲取圖片,通過隊(duì)列實(shí)現(xiàn),而且圖片會(huì)有緩存,在下次請(qǐng)求相同的鏈接時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用緩存,
而不從網(wǎng)上請(qǐng)求數(shù)據(jù)。

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 100.0f, 100.0f, 100.0f)]; [imageView setImageWithURL:[NSURL URLWithString:@"http://i.imgur.com/r4uwx.jpg"] placeholderImage:[UIImage imageNamed:@"placeholder-avatar"]]; [self.view addSubview:imageView]; 上面的方法是官方提供的,還有一種方法, NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.scott-sherwood.com/wp-content/uploads/2013/01/scene.png"]];AFImageRequestOperation *operation = [AFImageRequestOperation imageRequestOperationWithRequest:request imageProcessingBlock:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {self.backgroundImageView.image = image;} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {NSLog(@"Error %@",error);}];[operation start];
如果使用第一種URLWithString: ?placeholderImage:會(huì)有更多的細(xì)節(jié)處理,其實(shí)實(shí)現(xiàn)還是通過
AFImageRequestOperation處理,可以點(diǎn)擊URLWithString: ?placeholderImage:方法進(jìn)去看一下就一
目了然了。所以我覺得還是用第一種好。

如何通過URL獲取plist文件
通過url獲取plist文件的內(nèi)容,用的很少,這個(gè)方法在官方提供的方法里面沒有

NSString *weatherUrl = @"http://www.calinks.com.cn/buick/kls/Buickhousekeeper.plist";NSURL *url = [NSURL URLWithString:[weatherUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];NSURLRequest *request = [NSURLRequest requestWithURL:url];[AFPropertyListRequestOperation addAcceptableContentTypes:[NSSet setWithObject:@"text/plain"]];AFPropertyListRequestOperation *operation = [AFPropertyListRequestOperation propertyListRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id propertyList) {NSLog(@"%@",(NSDictionary *)propertyList);}failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id propertyList) {NSLog(@"%@",error);}];[operation start]; 如果稍不留神,可能就出現(xiàn)Error Domain=AFNetworkingErrorDomain Code=-1016 "Expected content type {("application/x-plist" )}, got text/plain" UserInfo=0x16e91ce0 {NSLocalizedRecoverySuggestion=... ... , AFNetworkingOperationFailingURLRequestErrorKey= { }, NSErrorFailingURLKey=, NSLocalizedDescription=Expected content type {("application/x-plist" )}, got text/plain, AFNetworkingOperationFailinponseErrorKey= { URL: } { status code: 200, headers {"Accept-Ranges" = bytes;Connection = "keep-alive";"Content-Length" = 974;"Content-Type" = "text/plain";Date = "Sat, 25 Jan 2014 07:29:26 GMT";Etag = ""1014c2-3ce-4ee63e1c80e00"";"Last-Modified" = "Wed, 25 Dec 2013 23:04:24 GMT";Server = "nginx/1.4.2";} }}
可能還會(huì)出現(xiàn)亂碼,解決辦法就是[AFPropertyListRequestOperation addAcceptableContentTypes:
[NSSet setWithObject:@"text/plain"]];

如何通過URL獲取XML數(shù)據(jù)
xml解析使用AFXMLRequestOperation,需要實(shí)現(xiàn)蘋果自帶的NSXMLParserDelegate委托方法,XML中有一
些不需要的協(xié)議格式內(nèi)容,所以就不能像json那樣解析,還得實(shí)現(xiàn)委托。我之前有想過能否所有的XML鏈
接用一個(gè)類處理,而且跟服務(wù)端做了溝通,結(jié)果很不方便,效果不好。XML大多標(biāo)簽不同,格式也不固定
,所以就有問題,使用json就要方便的多。
第一步;在.h文件中加入委托NSXMLParserDelegate
第二步;在.m文件方法中加入代碼

NSURL *url = [NSURL URLWithString:@"http://113.106.90.22:5244/sshopinfo"];NSURLRequest *request = [NSURLRequest requestWithURL:url];AFXMLRequestOperation *operation =[AFXMLRequestOperation XMLParserRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser) {XMLParser.delegate = self;[XMLParser setShouldProcessNamespaces:YES];[XMLParser parse];}failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, NSXMLParser *XMLParser) {NSLog(@"%@",error);}];[operation start];
第三步;在.m文件中實(shí)現(xiàn)委托方法

//在文檔開始的時(shí)候觸發(fā) -(void)parserDidStartDocument:(NSXMLParser *)parser{NSLog(@"解析開始!"); } //解析起始標(biāo)記 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{NSLog(@"標(biāo)記:%@",elementName);} //解析文本節(jié)點(diǎn) - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{NSLog(@"值:%@",string); } //解析結(jié)束標(biāo)記 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{NSLog(@"結(jié)束標(biāo)記:%@",elementName); } //文檔結(jié)束時(shí)觸發(fā) -(void) parserDidEndDocument:(NSXMLParser *)parser{NSLog(@"解析結(jié)束!"); }
運(yùn)行的結(jié)果:


如何使用AFHTTPClient進(jìn)行web service操作
AFHTTPClient處理GET 和 POST請(qǐng)求.做網(wǎng)頁(yè)的朋友們這個(gè)方法用的比較多。在要經(jīng)常調(diào)用某個(gè)請(qǐng)求時(shí),
可以封裝,節(jié)省資源。

BaseURLString = @"http://www.raywenderlich.com/downloads/weather_sample/";NSURL *baseURL = [NSURL URLWithString:[NSString stringWithFormat:BaseURLString]];NSDictionary *parameters = [NSDictionary dictionaryWithObject:@"json" forKey:@"format"];AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:baseURL];[client registerHTTPOperationClass:[AFJSONRequestOperation class]];[client setDefaultHeader:@"Accept" value:@"text/html"];[client postPath:@"weather.php" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {NSString* newStr = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];NSLog(@"POST請(qǐng)求:%@",newStr);}failure:^(AFHTTPRequestOperation *operation, NSError *error) {NSLog(@"%@",error);}];[client getPath:@"weather.php" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {NSString* newStr = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];NSLog(@"GET請(qǐng)求:%@",newStr);}failure:^(AFHTTPRequestOperation *operation, NSError *error) {NSLog(@"%@",error);}];
運(yùn)行結(jié)果:

如果需要顯示網(wǎng)絡(luò)活動(dòng)指示器,可以用下面方法:
[AFNetworkActivityIndicatorManager sharedManager].enabled = YES;
Error: Error Domain=AFNetworkingErrorDomain Code=-1016 "Request failed: unacceptable?
content-type: text/html" UserInfo=0x16774de0?
{NSErrorFailingURLKey=http://192.168.2.2:8181/ecar/tsp/uploadLocation?
CID=781666&serviceType=1, AFNetworkingOperationFailinponseErrorKey= { URL:?
http://192.168.2.2:8181/ecar/tsp/uploadLocation?CID=781666&serviceType=1 } { status code:?
200, headers {
? ? XXX
} }, NSLocalizedDescription=Request failed: unacceptable content-type: text/html}
返回?cái)?shù)據(jù)格式不對(duì)。注銷這句話: op.responseSerializer = [AFJSONResponseSerializer?
serializer];然后將返回的數(shù)據(jù)自己轉(zhuǎn)換。


4 NSXMLParser和GDataXMLNode兩種解析方式


 iPhone中兩種XML解析方式NSXMLParser和GDataXMLNode是本文要介紹的內(nèi)容,很詳細(xì)的介紹了
NSXMLParser和GDataXMLNode這兩種方式,常用的解析XML的方式分為兩種,它們基于不同的API:
  1.Tree-based API:這種API的處理方式是將XML的結(jié)構(gòu)看成是樹,然后把樹的各部分看成一個(gè)對(duì)象
來處理,這就是我們說的DOM (Document Object Model)方式 ?。在iPhone的SDK里包含了一個(gè)libxml2的
框架(Framework)就能進(jìn)行DOM解析方式 ?。Google的GDataXML也是基于libxml2的,因此在使用GDataXML
之前,你需要先導(dǎo)入libxml2 ?。
  2.Event-driven API:這種方式通常用于解析基于的事件,SAX解析方式就是這種解析方式的代表 ?
。在iPhone開發(fā)的,也可以利用這種方式來解析XML,不過這可不是Iphone SDK的屬性啊,而是
Objective-C的功能 ?。在Objectvie-C種有專門解析XML的類NSXMLParser ?。
  NSXMLParser和CGataXML的使用方法:
  NSXMLParser解析方式
  NSXMLParser解析XML的主要工作都是靠它的代理(NSXMLParserDelegate)來實(shí)現(xiàn)的 ?。

- (void)viewDidLoad { [super viewDidLoad]; //........ NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://lab.xxxxxx.com/xxx/xxx.xml"]]; [parser setDelegate:self]; [parser parse]; for (int i = 0; i < [newsArray count]; i++) { NSLog(@"%@",[newsArray objectAtIndex:i]); } }
就這么幾句,就開始解析了,怎樣得到XML里面的數(shù)據(jù)呢?
  那就去代理里面找吧!

#pragma mark NSMXLParser Delegate Methods - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ if ([elementName isEqualToString:@"docTitle"]) { if (!newsArray) { newsArray = [[NSMutableArray alloc] init]; return; } } } - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ if (!currentString) { currentString = [[NSMutableString alloc] init]; } [currentString appendString:string]; [currentString setString:[currentString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]]; } - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ if ([elementName isEqualToString:@"docTitle"]) { [newsArray addObject:currentString]; } [currentString release]; currentString = nil; }
先說一下程序運(yùn)行的流程,當(dāng)parser初始化并執(zhí)行parse語(yǔ)句時(shí)([parser parse]),程序會(huì)跳到代理
方法里面走第一個(gè)代理方法 ?。第一個(gè)代理方法會(huì)將整個(gè)xml遍歷一遍,并識(shí)別xml里面的元素名稱
(elementName),在發(fā)現(xiàn)有我想找的信息(docTitle)時(shí),創(chuàng)建一個(gè)數(shù)組用來存儲(chǔ)這些信息,當(dāng)然第一個(gè)代
理還沒開始存儲(chǔ)信息 ?。
  接下來會(huì)走第二個(gè)代理,它會(huì)把第一個(gè)代理中我們相要找的信息存儲(chǔ)在currentString中 ?。其中我
增加了一個(gè)對(duì)獲取的字符串的處理語(yǔ)句 [currentString setString:[currentString?
stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]],它可以
將字符串開始的空格和換行附去掉(因?yàn)槌?huì)遇到xml文件格式不太標(biāo)準(zhǔn)的) ?。
  最后是第三個(gè)代理方法,把我們獲取的信息存儲(chǔ)到數(shù)組中 ?。
  當(dāng)然程序運(yùn)行過程中這三步的順序并不是這么嚴(yán)格的執(zhí)行的,而且會(huì)反復(fù)的執(zhí)行,但是大致的處理
過程是這樣的 ?。

  DOM解析方式之GDataXMLNode
  GDataXMLNode是基于libxml2的第三方文件,功能比較強(qiáng)大 ?。

NSError* error = nil; NSString *documentStr = [[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://www.xxxx.com/x/xxx.xml"] encoding:NSUTF8StringEncoding error:&error]; GDataXMLDocument* XMLdocument = [[GDataXMLDocument alloc] initWithXMLString:documentStr options:0 error:&error]; [documentStr release]; GDataXMLElement* rootElement = [XMLdocument rootElement]; NSArray *newsArray = [rootElement elementsForName:@"docTitle"]; for (int i = 0; i < [newsArray count]; i++) { NSLog(@"%@",[[newsArray objectAtIndex:i] stringValue]); }
就這么幾句,功能和上面的NSXMLParser,當(dāng)然這個(gè)數(shù)組里存儲(chǔ)的是GDataXMLElement的對(duì)象而不是
字符串 ?。
  在DOM解析方式中,先將XML文件或鏈接轉(zhuǎn)化成對(duì)象,這里是GDataXMLDocument對(duì)象,然后該對(duì)象里
面的每一部分都看成一個(gè)對(duì)象,如rootElement是一個(gè)GDataXMLElement對(duì)象,它是整個(gè)XML樹的根,包含
了該XML的所有信息 ?。我們直接在rootElement下找名為:docTitle的對(duì)象,把它放在數(shù)組里面(因?yàn)?
這樣的對(duì)象可能不止一個(gè)) ?。我們要取docTitle對(duì)象里面的內(nèi)容hello iPhone,該對(duì)象的stringValue
就是 ?。


5 GDataXMLNode:xml解析庫(kù)


一、GDataXMLNode說明
GDataXMLNode是Google提供的用于XML數(shù)據(jù)處理的類集。該類集對(duì)libxml2--DOM處理方式進(jìn)行了封裝,能
對(duì)較小或中等的xml文檔進(jìn)行讀寫操作且支持XPath語(yǔ)法。
使用方法:
? ? ?1、獲取GDataXMLNode.h/m文件,將GDataXMLNode.h/m文件添加到工程中
? ? ?2、向工程中增加“l(fā)ibxml2.dylib”庫(kù)
? ? ?3、在工程的“Build Settings”頁(yè)中找到“Header Search Path”項(xiàng),添
加/usr/include/libxml2"到路徑中
? ? ?4、添加“GDataXMLNode.h”文件到頭文件中,如工程能編譯通過,則說明GDataXMLNode添加成功

二、GDataXMLNode示例

示例:
html
<root> ?
? ? ?<name value="wusj"/> ?
? ? ?<age>24</age> ?
</root> ?

對(duì)此xml文件進(jìn)行解析

NSString *xmlPath = [[NSBundlemainBundle] pathForResource:@"test"ofType:@"xml"]; NSString *xmlString = [NSStringstringWithContentsOfFile:xmlPath encoding:NSUTF8StringEncodingerror:nil]; GDataXMLDocument *xmlDoc = [[GDataXMLDocumentalloc] initWithXMLString:xmlString options:0error:nil]; GDataXMLElement *xmlEle = [xmlDoc rootElement]; NSArray *array = [xmlEle children]; NSLog(@"count : %d", [array count]); for (int i = 0; i < [array count]; i++) { GDataXMLElement *ele = [array objectAtIndex:i]; // 根據(jù)標(biāo)簽名判斷 if ([[ele name] isEqualToString:@"name"]) { // 讀標(biāo)簽里面的屬性 NSLog(@"name --> %@", [[ele attributeForName:@"value"] stringValue]); } else { // 直接讀標(biāo)簽間的String NSLog(@"age --> %@", [ele stringValue]); } }
? ? 運(yùn)行結(jié)果: ? ? ? ? ??

三、GDataXMLNode方法小結(jié)
? ? ?最終的數(shù)據(jù)讀出都是在GDataXMLElement對(duì)象中讀出的,以下方法均為GDataXMLElement類的方法
? ? ?1、name方法,取標(biāo)簽名 e.g name標(biāo)簽的名稱“name”
? ? ?2、attributeForName: 取屬性結(jié)點(diǎn) 再調(diào)stringValue即可取到屬性值 e.g name標(biāo)簽中的value屬

? ? ?3、stringValue: 取標(biāo)簽間的字符串值 ?e.g: age間的24


6 ASIHttpRequest

ASIHttpRequest是一個(gè)對(duì)CFNetwork API進(jìn)行了封裝,并且使用起來非常簡(jiǎn)單的一套http請(qǐng)求api。
官方地址:http://allseeing-i.com/ASIHTTPRequest/
依賴庫(kù):CFNetwork.framework、SystemConfiguration.framework、MobileCoreServices.framework、
CoreGraphics.framework和libs.1.2.3dylib

下面是簡(jiǎn)單的http請(qǐng)求示例:
1、同步的http請(qǐng)求

// 簡(jiǎn)單的同步請(qǐng)求示例 - (void)syncRequest { NSURL *url = [NSURLURLWithString:@"http://www.weather.com.cn/data/sk/101010100.html"]; ASIHTTPRequest *request = [ASIHTTPRequestrequestWithURL:url]; [request startSynchronous]; NSError *error = [request error]; if (!error) { NSString *response = [request responseString]; NSLog(@"Response :%@", response); self.result.text = response; } else { self.result.text = @"error"; } }
2、異步的http請(qǐng)求

// 簡(jiǎn)單的異步請(qǐng)求示例(代理實(shí)現(xiàn)) - (void)asyncRequest { NSURL *url = [NSURLURLWithString:@"http://www.weather.com.cn/data/cityinfo/101010100.html"]; ASIHTTPRequest *request = [ASIHTTPRequestrequestWithURL:url]; request.delegate = self; // 開始異步請(qǐng)求 [request startAsynchronous]; }
代理方法:

<pre name="code" class="objc">// 請(qǐng)求完成 - (void)requestFinished:(ASIHTTPRequest *)request { // 如果請(qǐng)求的是二進(jìn)制數(shù)據(jù),用responseData,用NSData接收 NSLog(@"異步請(qǐng)求成功返回"); self.result.text = [request responseString]; } // 請(qǐng)求失敗 - (void)requestFailed:(ASIHTTPRequest *)request { NSLog(@"異步請(qǐng)求失敗"); self.result.text = @"error"; }
3、塊語(yǔ)法實(shí)現(xiàn)的異步請(qǐng)求

<pre name="code" class="objc">// 簡(jiǎn)單的異步請(qǐng)求用塊語(yǔ)法實(shí)現(xiàn) - (void)asyncRequestBlock { NSURL *url = [NSURLURLWithString:@"http://m.weather.com.cn/data/101010100.html"]; __blockASIHTTPRequest *request = [ASIHTTPRequestrequestWithURL:url]; [request setCompletionBlock:^{ // 請(qǐng)求響應(yīng)結(jié)束 NSString *response = [request responseString]; self.result.text = response; }]; [request setFailedBlock:^{ // 請(qǐng)求失敗 NSError *error = [request error]; // self.result.text = NSLog(@"error : %@", [error userInfo]); }]; [request startAsynchronous]; }

7 IOS使用第三方工具(RegexKitLite)實(shí)現(xiàn)正則表達(dá)式

? ? ? ?在IOS應(yīng)用中,經(jīng)常要輸入數(shù)據(jù),然輸入數(shù)據(jù),就要校驗(yàn)數(shù)據(jù)的合法性,這是我們很自然的聯(lián)想 到web應(yīng)用中的正則表達(dá)式。然而Cocoa并未支持正則表達(dá)式。這是我們可以使用第三方工具 (RegexKitLite)來實(shí)現(xiàn)正則表達(dá)式。1、下載(RegexKitLite)類庫(kù),備用下載地址:RegexKitLite,將RegexKitLite.h/? RegexKitLite.m兩個(gè)文件添加到您的項(xiàng)目中;2、在您的工程中添加libicucore.dylib frameworks;3、在您要校驗(yàn)的數(shù)據(jù)中使用RegexKitLite,這里假設(shè)校驗(yàn)一個(gè)電子郵箱 <pre name="code" class="objc">NSString *email = @"iMilo@163.com"; NSString *regex = @"\\b([a-zA-Z0-9%_.+\\-]+)@([a-zA-Z0-9.\\-]+?\\.[a-zA-Z]{2,6})\\b"; if ([email isMatchedByRegex:regex]) {NSLog(@"通過校驗(yàn)!"); } else {NSLog(@"未通過校驗(yàn),數(shù)據(jù)格式有誤,請(qǐng)檢查!"); }
說明:查看RegexKitLite源代碼,您會(huì)發(fā)現(xiàn)其實(shí)是對(duì)NSString的擴(kuò)展,所以校驗(yàn)的數(shù)據(jù)必須是NSString
類型的。

1、在寫正則表達(dá)式時(shí):所有的’\’都需要轉(zhuǎn)義,即:’\\’;
2、在很多JS的正則表達(dá)式可能是這樣寫,如:’/^\d{1,400}$/’,但是這樣的表達(dá)式Objective-C中并
不能識(shí)別,通過實(shí)際調(diào)試得出,應(yīng)將其寫為:’ ^\\d{1,400}$’(即:去掉表達(dá)式頭和尾的’/’)

總結(jié)

以上是生活随笔為你收集整理的IOS常用代码总结 - 第三方库部分的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。