Post on 20-Aug-2015
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;}