2015-12-28 15 views
2

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

創建用戶對象的模型類。以字典形式轉換響應,因爲它是JSON,而不是字符串。用字典創建類的初始化方法。像使用普通類實例一樣訪問所需對象的所需屬性。由於只有一個用戶,因此將其設置爲單例類。然後用戶屬性將在您的應用程序的任何地方都可用這將是正確的做法。爲了快速解決問題,請使用ShahiM的答案。 – NSNoob

回答

1

由於原來的解決方案已經公佈,我將專注於我認爲這是處理在房間裏的大象有道長&比較繁瑣的方式。這將在更長的時間內幫助你。

創建一個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"]; 

現在你的用戶的屬性將可以在App的任何地方。你只需要導入SharedUser.h所需UIView,下面來訪問您的數據UIViewController &類型:

NSString *userId = [SharedUser getInstance].userId; 

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

此外,我建議你應該閱讀雷Wenderlich的系列教程:

1. Object Oriented Design
2. Design Patterns
3. Intro to iOS design patterns

+1

哇... tq @NSNoob –

+1

謝謝你的建議@NSNoob –

1

響應是一個JSON對象。如果你問的是如何解析它,那麼iOS中有一個內置的JSON解析器。

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

謝謝@shahiM –

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

}]; 
+0

謝謝@ DilumN –

2

如果你想使用其他類的值,則:

首先創建一個數據模型類,解析數據字典/ JSON和存儲。 使用完成塊可以將特定/接收的user_id返回給調用者。

這裏您得到的JSON,你可以分析它,並得到想要的數據:

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

謝謝@santhosh雷迪 –

1

是,其高達你如何存儲數據,並且如果要分析它,然後嘗試

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

謝謝@sailendra庫馬爾 –

+0

oh..you最廁所 –

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

}]; 
+1

謝謝@ nikhil84 –

1

你可以做一個的NSDictionary,保存在其JSON數據,並從中獲取USER_ID。就像這樣:

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

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

謝謝@ arpit –

+0

不客氣。請踊躍投票,如果你發現答案有幫助。 –

相關問題