Nishanth Nishanth - 5 days ago 6
Objective-C Question

how to set textfiled value by getting data from server

how to set textfiled value by getting data from server

i am getting xml data from server but unable set those values to textfield.can u please correct me if there is any thing with code below

Customerdetails.h(model)

@interface Customerdetails : NSObject
@property(nonatomic,strong)NSString*fst;
@property(nonatomic,strong)NSString*lst;
@property(nonatomic,strong)NSString*street;
@property(nonatomic,strong)NSString*city;

@end


detailviewcontroller.m

#import "DetailViewController.h"
#import "Customerdetails.h"
@interface DetailViewController ()<NSXMLParserDelegate>
@property(nonatomic,strong)NSXMLParser*xmlparse;
@property(nonatomic,strong)NSMutableString*tempstr;
@property(nonatomic,strong)NSMutableString*foundvalue;
@property Customerdetails*csd;
@end

@implementation DetailViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
_csd=[[Customerdetails alloc]init];
NSMutableURLRequest*req=[[NSMutableURLRequest alloc]init];
_tempstr=[[NSMutableString alloc]init];
NSURL*url=[NSURL URLWithString:@"http://www.thomas-bayer.com/sqlrest/CUSTOMER/4"];
[req setURL:url];
[[[NSURLSession sharedSession]dataTaskWithRequest:req completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
// SMXMLDocument *document = [SMXMLDocument documentWithData:data error:&error];

NSString*str=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
_xmlparse=[[NSXMLParser alloc]initWithData:data];
_xmlparse.delegate=self;
[_xmlparse parse];
}] resume];
dispatch_async(dispatch_get_main_queue(), ^{
self.first.text=[self.csd fst];
self.last.text=[self.csd lst];
self.street.text=[self.csd street];
self.city.text=[self.csd city];
});

}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary<NSString *, NSString *> *)attributeDict;{

_tempstr=[[NSMutableString alloc]initWithString:elementName];

}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName;{
// sent when an end tag is encountered. The various parameters are supplied as above.
if([self.tempstr isEqualToString:@"FIRSTNAME"]){
[self.csd setFst:_foundvalue];
self.foundvalue=nil;
self.tempstr=nil;
}
if([self.tempstr isEqualToString:@"LASTNAME"]){
[self.csd setLst:_foundvalue];
self.foundvalue=nil;
self.tempstr=nil;
}
if([self.tempstr isEqualToString:@"STREET"]){
[self.csd setStreet:_foundvalue];
self.foundvalue=nil;
self.tempstr=nil;
}

if([self.tempstr isEqualToString:@"CITY"]){
[self.csd setCity:_foundvalue];
self.foundvalue=nil;
self.tempstr=nil;
}


if([elementName isEqualToString:@"CUSTOMER"]){
NSLog(@"%@",self.csd);
}
}

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

if([self.tempstr isEqualToString:@"FIRSTNAME"]){
self.foundvalue=[[NSMutableString alloc]initWithString:string];
}
if([self.tempstr isEqualToString:@"LASTNAME"]){
self.foundvalue=[[NSMutableString alloc]initWithString:string];
}
if([self.tempstr isEqualToString:@"STREET"]){
self.foundvalue=[[NSMutableString alloc]initWithString:string];
}

if([self.tempstr isEqualToString:@"CITY"]){
self.foundvalue=[[NSMutableString alloc]initWithString:string];
}
}


@end

Answer
    - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName;{
        // sent when an end tag is encountered. The various parameters are supplied as above.
        if([self.tempstr isEqualToString:@"FIRSTNAME"]){
            [self.csd setFst:_foundvalue];
            dispatch_async(dispatch_get_main_queue(), ^{
               self.first.text = [self.csd fst];

            });
            self.foundvalue=nil;
            self.tempstr=nil;
        }
        ...

Do it in this way.

If you get any issue, you can ask.

Comments