Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何保存来自服务器的响应,以及如何访问该数据_Ios_Mysql_Objective C_Iphone - Fatal编程技术网

Ios 如何保存来自服务器的响应,以及如何访问该数据

Ios 如何保存来自服务器的响应,以及如何访问该数据,ios,mysql,objective-c,iphone,Ios,Mysql,Objective C,Iphone,您好,我已成功从服务器获得响应。我需要在我的应用程序中访问服务器发送的用户id 检查我的代码: NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration]; NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObj

您好,我已成功从服务器获得响应。我需要在我的应用程序中访问服务器发送的用户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];
对于这段代码,我得到的响应如下:

在这里,我需要访问我的应用程序中的用户id。因此,我可以获取特定的用户id


谢谢。

响应是一个JSON对象。如果您要问的是如何解析它,那么iOS中就有一个内置的JSON解析器

NSDictionary *json_dict = [text JSONValue];
NSString *userID = [result objectForKey:@"user_id"];

创建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"];
}

 }];

如果要在其他类中使用该值,则:

首先创建一个数据模型类,解析数据字典/JSON并存储它。 使用完成块,您可以将特定/接收到的用户id返回给调用者

这里是JSON,您可以解析它并获得所需的数据:

NSDictionary *respDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
NSString *userID = respDict[@"user_id"];

是的,它取决于你如何存储数据,如果你想解析它,那么试试看

NSDictionary *jsonDict = [responseString JSONValue];
NSString *user_id = [jsonDict objectForKey:@"user_id"];

如下所示,解析在块中获取的数据

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"];
}

 }];

您可以制作一个NSDictionary,在其中保存JSON数据并从中获取用户id。像这样:

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

NSString *user_id= [dictionaryName valueForKey:@"user_id"];

由于最初的解决方案已经发布,我将重点关注更长更乏味的方式,我认为这是处理房间里大象的正确方式。从长远来看,这将对你有所帮助

创建一个Singleton类,因为一次只能有一个用户登录。

NSDictionary *json_dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];;//From Santosh Reddy's Answer
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
将您的回答转换为
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
&键入以下内容即可访问您的数据:

NSString *userId = [SharedUser getInstance].userId;
还要注意,我使用的是单例模式,因为我假设您只需要处理一个用户的属性,这些属性将在一段时间内在多个ViewController中使用。如果需要保存多个用户,请创建一个类似的用户模型类,并以类似的方式填充它们。(只是不要让他们成为单身汉)

此外,我建议您阅读Ray Wenderlich的系列教程,内容包括:




为用户对象创建模型类。将响应转换为字典形式,因为它是JSON,而不是字符串。使用字典为类创建初始值设定项方法。像处理普通类实例一样,访问所需对象的所需属性。因为只有一个用户,所以将其设置为单例类。然后,用户属性将在应用程序中的任何位置都可用。这将是正确的做法。要快速解决问题,请使用ShahiM的答案。不客气。如果您觉得答案有帮助,请踊跃投票。谢谢您的建议@NSNoob