簡體   English   中英

如何保存響應來自我的服務器,以及如何訪問該數據

[英]How to save the response From My server , and How can i access That data

您好我從我的服務器成功獲得響應。我需要訪問我的應用程序中的服務器發送的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。

謝謝。

如果要在其他類中使用該值,則:

首先創建一個數據Model Class,解析數據字典/ JSON並存儲它。 使用完成塊,您可以將特定/已接收的user_id返回給調用者。

在這里,您將獲得JSON,您可以解析它並獲得所需的數據:

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

由於原始解決方案已經發布,我將專注於更長和更乏味的方式,我認為這是處理房間里的大象的正確方法。 從長遠來看,這將對您有所幫助。

創建一個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導入所需的UIViewUIViewController並輸入以下類型即可訪問您的數據:

NSString *userId = [SharedUser getInstance].userId;

另請注意,我使用的是單例模式,因為我假設您只需要處理一個用戶的屬性,這些屬性將在一段時間內用於多個視圖控制器。 如果您需要保存多個用戶,請創建一個類似的用戶模型類,並以類似的方式填充它們。 (只是不要讓他們單身)。

另外我建議您閱讀Ray Wenderlich的系列教程:

1.面向對象設計
2.設計模式
3.介紹iOS設計模式

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

 }];

是的,它取決於你如何存儲數據,如果你想解析它,那么試試吧

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數據並從中獲取user_id 像這樣:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM