您好我的服务器响应成功了。我需要在我的应用中访问服务器发送的user_id。
检查我的代码:
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];
对于这段代码,我得到的答案如下:
这里我需要访问我的应用程序中的user_id。所以我可以获得特定的user_id。
谢谢。
答案 0 :(得分:2)
如果要在其他类中使用该值,则:
首先创建一个数据Model Class,解析数据字典/ JSON并存储它。 使用完成块,您可以将特定/已接收的user_id返回给调用者。
在这里,您将获得JSON,您可以解析它并获得所需的数据:
NSDictionary *respDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
NSString *userID = respDict[@"user_id"];
答案 1 :(得分:2)
由于原始解决方案已经发布,我将专注于更长和更长更麻烦的方式,我认为是在房间里处理大象的正确方法。从长远来看,这将对您有所帮助。
创建一个Singleton类,因为一次只能有一个用户登录。
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;
}
}
}
将您的回复转换为NSDictionary
。
NSDictionary *json_dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];;//From Santosh Reddy's Answer
使用结果属性填充您的sharedInstance:
[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"];
现在,您的用户属性将在应用程序的任何位置可用。您只需将SharedUser.h
导入所需的UIView
,UIViewController
&amp;输入以下内容来访问您的数据:
NSString *userId = [SharedUser getInstance].userId;
另请注意,我使用的是单例模式,因为我假设您只需要处理一个用户的属性,这些属性将在一段时间内用于多个视图控制器。如果您需要保存多个用户,请创建一个类似的用户模型类,并以类似的方式填充它们。 (只是不要让他们单身)。
另外我建议您阅读Ray Wenderlich的系列教程:
1. Object Oriented Design
2. Design Patterns
3. Intro to iOS design patterns
答案 2 :(得分:1)
响应是一个JSON对象。如果您要问的是如何解析它,那么iOS中就有一个内置的JSON解析器。
NSDictionary *json_dict = [text JSONValue];
NSString *userID = [result objectForKey:@"user_id"];
答案 3 :(得分:1)
创建一个NSDictionary来获取json数据。
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"];
}
}];
答案 4 :(得分:1)
是的,它取决于您如何存储数据,如果您想解析它,请尝试
NSDictionary *jsonDict = [responseString JSONValue];
NSString *user_id = [jsonDict objectForKey:@"user_id"];
答案 5 :(得分:1)
解析您在块中获取的数据,如下所示。
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"];
}
}];
答案 6 :(得分:1)
您可以制作NSDictionary,在其中保存JSON数据并从中获取 user_id 。像这样:
NSDictionary *dictionaryName=[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
NSString *user_id= [dictionaryName valueForKey:@"user_id"];