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.
7 Antworten
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
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"];
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"];
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"];
}
}];
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"];
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"];
}
}];
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"];
Neue Fragen
ios
iOS ist das mobile Betriebssystem, das auf dem Apple iPhone, iPod touch und iPad ausgeführt wird. Verwenden Sie dieses Tag [ios] für Fragen zur Programmierung auf der iOS-Plattform. Verwenden Sie die zugehörigen Tags [Objective-C] und [Swift] für Probleme, die für diese Programmiersprachen spezifisch sind.