Using Webservice in iOS

24
Working with Web Service in iOS

Transcript of Using Webservice in iOS

Working with Web Service in iOS

Syed Mahboob Nur iOS Developer

Blog: http://mahboobiosdeveloper.blogspot.com/Fb Profile:https://www.facebook.com/mahboob.nurMeetnar Profile:http://www.meetnar.com/Home/UserDetails/24

Web Service

A Web service is a method of communications between two electronic devices over the World Wide Web. It is a software function provided at a network address over the web with the service always on as in the concept of utility computing.

Several Types of Web Services

WSDL

• WSDL stands for Web Services Description Language

• WSDL is an XML-based language for describing Web services.

• WSDL is a W3C recommendation

Several Types of Web Services

SOAP

• SOAP stands for Simple Object Access Protocol• SOAP is an XML based protocol for accessing

Web Services.• SOAP is based on XML• SOAP is a W3C recommendation

Several Types of Web Services

UDDI

• UDDI stands for Universal Description, Discovery and Integration

• UDDI is a directory service where companies can search for Web services.

• UDDI is described in WSDL• UDDI communicates via SOAP

Several Types of Web Services

RDF

• RDF stands for Resource Description Framework

• RDF is a framework for describing resources on the web

• RDF is written in XML• RDF is a W3C Recommendation

Advantage of Using Web Service in Mobile Application

• Minimize application size• Minimize Code Size• Easy to modify• Reuse Application

Disadvantage of Using Web Service in Mobile Application

• Internet Connection Required • Server have to be active 24/7

Working with Web Service in iOS (WSDL)

WSDL is an XML format for describing network services as a set of endpoints operating on messages containing either document-oriented or procedure-oriented information. The operations and messages are described abstractly, and then bound to a concrete network protocol and message format to define an endpoint. Related concrete endpoints are combined into abstract endpoints (services)

WSDL Example<xml>

<types> <schema targetNamespace="http://example.com/

stockquote.xsd" xmlns="http://www.w3.org/2000/10/

XMLSchema"> <element name="TradePriceRequest">

<complexType> <all> <element name="tickerSymbol" type="string"/>

</all> </complexType> </element> <element

name="TradePrice"> <complexType> <all> <element name="price" type="float"/> </all> </complexType> </element> </schema>

</types></xml>

Steps of Implementing XML Service in IOS

• Create a XML Parser file as NSObject type. • Write relevant code in the files.• Call the XML Parser class in a View Controller

Class and load XML by url . • Parse the data and load in the containers or

view components. Example : Table View, Picker View, Labels, Text Field etc.

Create a XML Parser file as NSObject type.

#import <Foundation/Foundation.h>//#import "TeamViewController.h"#import "TeamInfo.h"

@interface TeamParser : NSObject<NSXMLParserDelegate>{ NSString *currentNodeImage; NSString *currentNodeName;

NSXMLParser *parser; NSMutableArray *imageArray; NSMutableArray *nameArray; TeamInfo*teamInfo;

}@property (nonatomic, retain) NSMutableArray *imageArray;@property (nonatomic, retain) NSMutableArray *nameArray;

-(id) loadXMLByURL:(NSString *)urlString;@end

.m file implementation#import "TeamParser.h"

@implementation TeamParser@synthesize imageArray;

-(id) loadXMLByURL:(NSString *)urlString{ imageArray= [[NSMutableArray alloc] init]; nameArray=[[NSMutableArray alloc]init]; NSURL *url = [NSURL URLWithString:urlString]; //parser = [[NSXMLParser alloc] initWithData:aData]; parser= [[NSXMLParser alloc] initWithContentsOfURL:url]; //parser = [[NSXMLParser alloc] initWithData:aData];

parser.delegate=self;[parser parse];

return self;}

- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{

if ([elementname isEqualToString:@"team"]){

currentNodeImage=[[NSString alloc] init] ; currentNodeName=[[NSString alloc]init]; teamInfo=[[TeamInfo alloc]init];

}}

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ if ([elementname isEqualToString:@"logo"]) { teamInfo.teamLogo = currentNodeImage; //NSLog(@"image:%@",currentNodeImage); } if ([elementname isEqualToString:@"name"]) { teamInfo.teamName = currentNodeImage; //NSLog(@"name:%@",currentNodeImage); }

if ([elementname isEqualToString:@"team"]) { [imageArray addObject:teamInfo]; [currentNodeImage release]; [currentNodeName release]; currentNodeImage = nil; currentNodeName=Nil; }

}

Call the XML Parser class in a View Controller Class and load XML by url .

-(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:YES]; teamImageParser = [[TeamParser alloc] loadXMLByURL:@"http://www.amarhost.info/sabbir/iOS/AsiaCup/Services/teamlogo.xml"]; imageNameArray=teamImageParser.imageArray; teamNameArray=teamImageParser.nameArray; for(int i=0;i<[imageNameArray count];i++) { NSLog(@"%@",[imageNameArray objectAtIndex:i]); } for(int i=0;i<[teamNameArray count];i++) { NSLog(@"%@",[teamNameArray objectAtIndex:i]); } }

Plot Parsed Data in the TableView- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return 1;}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return [[teamImageParser imageArray] count];}

Plot Parsed Data in the TableView- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

static NSString *CellIdentifier = @"TeamCustomCell"; TeamCustomCell *cell = (TeamCustomCell*)[teamTableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil){

NSArray *topLabelObject = [[NSBundle mainBundle] loadNibNamed:@"TeamCustomCell" owner:self options:nil];

for (id currentObject in topLabelObject){

if ([currentObject isKindOfClass:[UITableViewCell class]]){

cell = (TeamCustomCell*) currentObject;break;

}}

}

TeamInfo *teamInfo; teamInfo = [[teamImageParser imageArray] objectAtIndex:indexPath.row]; cell.selectionStyle = UITableViewCellSelectionStyleNone;

cell.headerTextLabel.text=teamInfo.teamName; NSLog(@"teamName: %@",teamInfo.teamName);

imageQueueTeamLogo = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul); dispatch_async(imageQueueTeamLogo, ^ { UIImage *imageTVGuideLogo = [UIImage imageWithData:[NSData dataWithContentsOfURL: [NSURL URLWithString:[teamInfo teamLogo]]]]; dispatch_async(dispatch_get_main_queue(), ^ { cell.titleImageView.image = imageTVGuideLogo; [cell setNeedsLayout]; }); }); return cell;}

That’s all for today