使用ASI框架,必須先導入ASIHTTPRequest源文件和ASI依賴的框架,具體的怎麼使用ASI能夠google一下。 web
這裏我使用的查詢接口 app
http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode=%@&userID=%@, 框架
新建一個xib,添加一個UITextField 和 UIButton,UITextField用於輸入手機號碼,以下圖: ide
綁定UIButton的點擊事件-(IBAction)searchButtonClick:(id)sender; google
//responds to the click event of the search button -(IBAction)searchButtonClick:(id)sender { [_textField resignFirstResponder]; NSString * number = _textField.text; if([number length] == 0) { [CUtils showAlertWithTitle:nil withMessage:@"EmptyNumber"]; return ; } NSString *urlString = [NSString stringWithFormat:@"http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode=%@&userID=%@",number,@""]; ASIHTTPRequest * request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:urlString]]; [request setFailedBlock:^{ CCLog(@"Search Failed."); }]; [request setCompletionBlock:^{ [self hideNetworkActivity]; CCLog(@"%@",[[NSString alloc] initWithData:[request responseData] encoding:NSUTF8StringEncoding]); [self performSelectorOnMainThread:@selector(parserXML:) withObject:[request responseData] waitUntilDone:YES]; }]; [request startAsynchronous]; }
-(void)parserXML:(NSData *)data { CXMLParser * parser = [[CXMLParser alloc] initWithData:data completionHandler:^(NSString * value){ CCLog(@"Parser completion handler"); if(value.length == 0) { return ; } CCLog(@"%@",value); }]; [parser release]; }CXMLParser 類是我自定義一個用於解析xml的類,下面是改類的實現代碼:
CXMLParser.h文件: atom
#import <Foundation/Foundation.h> typedef void (^XMLParserCompletionHandler)(NSString * value); @interface CXMLParser : NSObject <NSXMLParserDelegate> @property (nonatomic,retain) NSString * currentElement; @property (nonatomic,retain) NSXMLParser * xmlParser; @property (nonatomic,retain) NSMutableString * result; @property (nonatomic,copy) XMLParserCompletionHandler completionHandler; -(id)initWithData:(NSData *)data completionHandler:(XMLParserCompletionHandler)paramHandler; @endCXMLParser.m文件:
#import "CXMLParser.h" @implementation CXMLParser @synthesize completionHandler; -(id)initWithData:(NSData *)data completionHandler:(XMLParserCompletionHandler)paramHandler { self = [self init]; if(self) { self.completionHandler = paramHandler; _result = [[NSMutableString alloc] init]; _xmlParser = [[NSXMLParser alloc] initWithData:data]; _xmlParser.delegate = self; [_xmlParser parse]; } return self; } -(id) init { self = [super init]; if(self) { } return self; } -(void)dealloc { [_xmlParser release]; _xmlParser = nil; [_currentElement release]; _currentElement = nil; self.completionHandler = NULL; [_result release]; _result = nil; [super dealloc]; } #pragma mark - NSXMLParserDelegate Methods -(void)parserDidStartDocument:(NSXMLParser *)parser { NSLog(@"Parser start"); } -(void)parserDidEndDocument:(NSXMLParser *)parser { if(self.completionHandler) self.completionHandler(self.result); else NSLog(@"The completion handler is nil"); NSLog(@"Parser end"); } -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { _currentElement = [elementName retain]; NSLog(@"%@",_currentElement); } -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { NSLog(@"%@",string); if([_currentElement isEqualToString:@"string"]) { [_result appendString:string]; } else { NSLog(@"Element name : %@ is error",_currentElement); } } -(void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError { NSLog(@"parser error : %@",parseError); if(self.completionHandler) self.completionHandler(@""); } @end