Hallo, ich erhalte die Antwort von meinem Server erfolgreich. Ich muss auf die Benutzer-ID zugreifen, die vom Server in meiner App gesendet wurde.

Überprüfen Sie meinen Code:

 NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];
        NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: nil delegateQueue: [NSOperationQueue mainQueue]];



        NSURL * url = [NSURL URLWithString:@"my url"];
        NSMutableURLRequest * urlRequest = [NSMutableURLRequest requestWithURL:url];




        NSString * params=[[NSString alloc]initWithFormat:@"mobile=%@",[self.reqnum text ]];

        NSLog(@"%@",params);
        [urlRequest setHTTPMethod:@"POST"];
        [urlRequest setHTTPBody:[params dataUsingEncoding:NSUTF8StringEncoding]];

        NSURLSessionDataTask * dataTask =[defaultSession dataTaskWithRequest:urlRequest
                                                           completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                                               NSLog(@"Response:%@ %@\n", response, error);
                                                               if(error == nil)
                                                               {
                                                                   NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];

                                                                     NSLog(@"Data = %@",text);



                                                                   [[NSUserDefaults standardUserDefaults]setObject:@"Y" forKey:@"login"];

                                                                   [[NSUserDefaults standardUserDefaults] synchronize];


                                                               }


                                                           }];
        [dataTask resume];

Für diesen Code erhalte ich folgende Antwort:

Hier muss ich auf die Benutzer-ID in meiner App zugreifen. Kann ich diese bestimmte Benutzer-ID erhalten?

Danke.

3
NAVEEN KUMAR 28 Dez. 2015 im 12:17

7 Antworten

Beste Antwort

Da bereits Originallösungen veröffentlicht wurden, werde ich mich auf eine längere und langwierigere Art konzentrieren, die meiner Meinung nach die richtige Art ist, mit dem Elefanten im Raum umzugehen. Das hilft Ihnen auf längere Sicht.

Erstellen Sie eine Singleton-Klasse, da jeweils nur ein Benutzer angemeldet sein kann.

SharedUser.h

#import <Foundation/Foundation.h>
@interface SharedUser : NSObject

@property (strong, nonatomic) NSString* userId;
@property (strong, nonatomic) NSString* userName;
@property (strong, nonatomic) NSString* subscriptionStatus;
@property (strong, nonatomic) NSString* registerDate;
@property (strong, nonatomic) NSString* expiryDate;
+(SharedUser*) getInstance;

@end

SharedUser.m

#import "SharedUser.h"

@implementation SharedUser



static SharedUser * sharedInstance;



+(SharedUser*) getInstance
{
    @synchronized(self)
    {
        if(sharedInstance == nil)
        {

            sharedInstance = [[SharedUser alloc] init];
            sharedInstance.userName = @"";
            sharedInstance.userId = @"";
            sharedInstance.subscriptionStatus = @"";
            sharedInstance.registerDate = @"";
            sharedInstance.expiryDate = @"";
            return sharedInstance;
        }
        else
        {
            return  sharedInstance;
        }

    }
}

Konvertieren Sie Ihre Antwort in NSDictionary.

NSDictionary *json_dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];;//From Santosh Reddy's Answer

Füllen Sie Ihre sharedInstance mit den Ergebnisattributen:

[SharedUser getInstance].userId = [json_dict objectForKey:@"user_id"];
[SharedUser getInstance].userName = [json_dict objectForKey:@"username"];
[SharedUser getInstance].subscriptionStatus = [json_dict objectForKey:@"subscription_status"];
[SharedUser getInstance].registryDate = [json_dict objectForKey:@"register_date"];//Better to use NSDate type instead of NSString
[SharedUser getInstance].expiryDate = [json_dict objectForKey:@"expiry_date"];

Jetzt sind die Attribute Ihres Benutzers überall in der App verfügbar. Man muss einfach SharedUser.h in das gewünschte UIView, UIViewController & amp importieren; Geben Sie Folgendes ein, um auf Ihre Daten zuzugreifen:

NSString *userId = [SharedUser getInstance].userId;

Beachten Sie auch, dass ich ein Singleton-Muster verwende, da ich davon ausgehe, dass Sie nur die Attribute eines Benutzers verarbeiten müssen, die im Laufe der Zeit in mehreren Viewcontrollern verwendet werden. Wenn mehrere Benutzer gespeichert werden müssen, erstellen Sie eine ähnliche Benutzermodellklasse und füllen Sie sie auf ähnliche Weise. (Mach sie einfach nicht zu Singleton).

Außerdem würde ich vorschlagen, dass Sie Ray Wenderlichs Serien-Tutorials lesen über:

1. Objektorientiertes Design
2. Entwurfsmuster
3. Einführung in iOS-Entwurfsmuster

2
NSNoob 11 Jän. 2016 im 09:44

Wenn Sie den Wert in anderen Klassen verwenden möchten, dann:

Erstellen Sie zunächst eine Datenmodellklasse, analysieren Sie das Datenwörterbuch / JSON und speichern Sie es. Mit dem Abschlussblock können Sie die spezifische / empfangene user_id an den Anrufer zurückgeben.

Hier bekommen Sie in JSON, Sie können es analysieren und die gewünschten Daten erhalten:

NSDictionary *respDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
NSString *userID = respDict[@"user_id"];
2
Santhosh Reddy 28 Dez. 2015 im 09:28

Die Antwort ist ein JSON-Objekt. Wenn Sie fragen, wie es analysiert werden soll, gibt es in iOS einen integrierten JSON-Parser.

NSDictionary *json_dict = [text JSONValue];
NSString *userID = [result objectForKey:@"user_id"];
1
ShahiM 28 Dez. 2015 im 09:22

Erstellen Sie ein NSDictionary, um JSON-Daten abzurufen.

   NSURLSessionDataTask * dataTask =[defaultSession dataTaskWithRequest:urlRequest
     completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
     NSLog(@"Response:%@ %@\n", response, error);
     if(error == nil)
             {
      NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
      NSString *userID = [dictionary objectForKey:@"user_id"];
}

 }];
1
DilumN 28 Dez. 2015 im 09:25

Ja, es liegt an Ihnen, wie Sie Daten speichern und wenn Sie sie analysieren möchten, versuchen Sie es

NSDictionary *jsonDict = [responseString JSONValue];
NSString *user_id = [jsonDict objectForKey:@"user_id"];
1
Sailendra 28 Dez. 2015 im 09:28

Analysieren Sie die Daten, die Sie im Block erhalten, wie folgt.

completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
     NSLog(@"Response:%@ %@\n", response, error);
     if(error == nil)
             {
     NSDictionary *JSON = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
    NSDictionary *response = JSON[@"user_id"];
}

 }];
1
nikhil84 28 Dez. 2015 im 09:29

Sie können ein NSDictionary erstellen, JSON-Daten darin speichern und Benutzer-ID daraus abrufen. So was:

NSDictionary *dictionaryName=[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

NSString *user_id= [dictionaryName valueForKey:@"user_id"];
1
Arpit Dongre 28 Dez. 2015 im 09:32