Dans le service Web de savon, comment obtenir les valeurs dans le tableau utilisateur et les stocker dans une chaîne différente. Je dois stocker le titre, le prénom, etc. dans NSString. Comment faire cela dans l'objectif c?

   - (IBAction)loginbutton:(id)sender {
   //calling the soap message
    NSString *userid = _username.text;
    NSString *password = _password.text;
   soapMessage = [NSString stringWithFormat:@"my soap url",userid,password];
    NSURL *url = [NSURL URLWithString:@"my soap url"];
    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
    NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]];
    [theRequest addValue:@"www.etownpanchayat.com" forHTTPHeaderField:@"Host"];
    [theRequest addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    [theRequest addValue: @"http://tempuri.org/LoginDetails" forHTTPHeaderField:@"SOAPAction"];
    [theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];
    [theRequest setHTTPMethod:@"POST"];
    [theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
    //initiate the request
    NSURLConnection *connection =[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
    if(connection)
    {
        webResponseData = [NSMutableData data] ;
    }
    else
    {
        NSLog(@"Connection is NULL");
    }
}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    [self.webResponseData  setLength:0];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [self.webResponseData  appendData:data];
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    NSLog(@"Some error in your Connection. Please try again.");
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection {
    NSLog(@"Received %d Bytes", [webResponseData length]);
    NSString *theXML = [[NSString alloc] initWithBytes:
                        [webResponseData mutableBytes] length:[webResponseData length] encoding:NSUTF8StringEncoding];

    NSLog(@"%@",theXML);

    //now parsing the xml

    NSData *myData = [theXML dataUsingEncoding:NSUTF8StringEncoding];

    NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:myData];

    //setting delegate of XML parser to self
    xmlParser.delegate = self;

    // Run the parser
    @try{
        BOOL parsingResult = [xmlParser parse];
        NSLog(@"parsing result = %hhd",parsingResult);
    }
    @catch (NSException* exception)
    {
        UIAlertView* alert = [[UIAlertView alloc]initWithTitle:@"Server Error" message:[exception reason] delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
        [alert show];
        return;
    }
}
-(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
  namespaceURI:(NSString *)namespaceURI qualifiedName:
(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    currentElement = elementName;
    NSLog(@" %@ the current .......",currentElement);

}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    NSLog(@"Parsed Element : %@", currentElement);
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSArray *)userArray
{
    if ([currentElement isEqualToString:@"LoginDetailsResult"]) {
        NSLog(@"%@ the out value is ",userArray);
       //In user array i am getting the following response [{"Title":"Mrs","FirstName":"Pavithra","LastName":"(null)","ContactNo":"8073243634","EmailId":"test123456","DoorNo":"","StreetName":"","City":"v","Pincode":"v","State":"b","Country":"v","Address":"vb","UserId":526722}]

        }

}
-1
pavithra 21 avril 2017 à 13:35

3 réponses

Meilleure réponse

Créez d'abord une nouvelle classe nommée UserModel héritée de NSObject et écrivez ci-dessous le code dans la classe UserModel.h

@interface UserModel : NSObject
@property (nonatomic, strong) NSString* title;
@property (nonatomic, strong) NSString* firstName;
@property (nonatomic, strong) NSString* lastName;
@property (nonatomic, strong) NSString* contactNo;
@property (nonatomic, strong) NSString* emailId;
@property (nonatomic, strong) NSString* doorNo;
@property (nonatomic, strong) NSString* streetName;
@property (nonatomic, strong) NSString* city;
@property (nonatomic, strong) NSString* pincode;
@property (nonatomic, strong) NSString* state;
@property (nonatomic, strong) NSString* country;
@property (nonatomic, strong) NSString* address;
@property (nonatomic, strong) NSString* userId;

- (id) initWithDictionary:(NSDictionary*)dict;

Et dans la classe UserModel.m, ajoutez ce code

- (id) initWithDictionary:(NSDictionary*)dict
{
    self = [super init];
    if (self)
    {
        self.title = dict[@"Title"];
        self.firstName = dict[@"FirstName"];
        self.lastName = dict[@"LastName"];
        self.contactNo = dict[@"ContactNo"];
        self.emailId = dict[@"EmailId"];
        self.doorNo = dict[@"DoorNo"];
        self.streetName = dict[@"StreetName"];
        self.city = dict[@"City"];
        self.pincode = dict[@"Pincode"];
        self.state = dict[@"State"];
        self.country = dict[@"Country"];
        self.address = dict[@"Address"];
        self.userId = dict[@"UserId"];
    }
    return self;
}

Importez UserModel.h dans votre classe dans laquelle vous analysez puis dans le code où vous avez reçu un tableau de dictionnaire et prenez Global (vous pouvez également prendre local dépend de votre logique que vous appliquez)

#import UserModel.h
UserModel* _userObj

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSArray *)userArray
{
    if ([currentElement isEqualToString:@"LoginDetailsResult"])
   {
        NSLog(@"%@ the out value is ",userArray);
       for (NSDictionary* dict in  modelsListArray)
         {
            //UserModel* obj = [[UserModel alloc]  initWithDictionary:dict]; 
            _userObj = [[UserModel alloc]  initWithDictionary:dict]
         }
    }
}

Maintenant, si vous définissez des données sur UIlabel de l'utilisateur UiTextFields ci-dessous le code pour définir les données

self.firstNameLabel.text = _userObj. firstName;
self.lastNameLabel.text = _userObj. lastName;

C'est le modèle de conception MVC. Essayez de toujours suivre ce modèle.

1
Vinay Kumar 25 avril 2017 à 05:26

D'abord: le dictionnaire est mal écrit, vous pouvez essayer ceci:

NSArray * array = @ [@ {@ "Title": @ "Mrs", @ "UserId": @ 526722}]; NSLog (@ "% @", tableau); l'espoir peut vous aider;

-2
user7900932 21 avril 2017 à 11:28

Je pourrais dire que utilisez la classe de modèle pour une meilleure gestion de ce type de données. Créez la classe NSObject, dites «Utilisateur» et ajoutez toutes ces propriétés à la classe. À l'aide de n'importe quel analyseur JSON tel que SBJSON, convertissez votre réponse en classe de modèle afin d'obtenir un tableau d'objets de classe de modèle. Ensuite, vous pourrez gérer cette réponse très facilement (user.title, user.firstname etc.)

0
QUserS 21 avril 2017 à 11:36