使用AFNetworking 3.0从下一个视图控制器发送响应服务器的特定参数?

时间:2016-05-18 05:39:46

标签: ios objective-c

我是iOS应用程序开发的新手。我将使用AFNetworking 3.0。在我进入手机号码的第一个视图。然后单击提交按钮然后它与服务器连接,我从服务器得到以下响应:

-(void)serverconnection

{

    NSString *Loginurl = [NSString stringWithFormat:@"https://24x7tracker.com/busservices/School/DriverPreLogin"];


NSDictionary *params = @{@"mobile":self.phonenumber.text,

                         @"archive":@"schooldb1"

                         };


AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];


manager.responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];


manager.responseSerializer = [AFHTTPResponseSerializer serializer];

AFSecurityPolicy* policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];

[policy setValidatesDomainName:NO];

[policy setAllowInvalidCertificates:YES];

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", nil];

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/html",nil];



manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/plain",nil];


[manager POST:Loginurl parameters:params progress:nil success:^(NSURLSessionTask *task, id responseObject) {


    NSLog(@"Json: %@", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]);

    [self getdata:responseObject];


    NSString *str = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
    NSLog(@"responseData: %@", str);

    [self performSegueWithIdentifier:@"loginsegue" sender:self];

}
      failure:^(NSURLSessionTask *operation, NSError *error)

{

    NSLog(@"Error: %@", error);

    UIAlertController *Erroralert=   [UIAlertController

                                      alertControllerWithTitle:@" Network Connection Failed!!"

                                      message:@"Please try again"

                                      preferredStyle:UIAlertControllerStyleAlert];

    [self presentViewController:Erroralert animated:YES completion:nil];





    UIAlertAction* yesButton = [UIAlertAction

                                actionWithTitle:@"Ok"

                                style:UIAlertActionStyleDefault

                                handler:^(UIAlertAction * action)

                                {
                                    [self resignFirstResponder];

                                    [Erroralert dismissViewControllerAnimated:YES completion:nil];



                                }];

    [Erroralert addAction: yesButton];


}];


}

-(void)getdata:(NSData *)data

{}

现在我的问题是,如何从responseData中仅获取该令牌并从下一个视图将其发送到服务器。请帮帮我。

注意:每当我们每次调用服务令牌时都会改变。

我的代码是:

  var dt = [{"text":"DC=test,DC=in","children":[;
                var cnt = spl.length - 1;
                for (q = 0; q < cnt; q++) {
                    if (spl[q].startsWith(","))
                        dt += {"text":" + spl[q].split(",")[1] + "},;
                    else
                        dt += {"text":" + spl[q].split(",")[0] + "},;
                }
                dt += ]}];

3 个答案:

答案 0 :(得分:1)

你可以用两种方式做到这一点

  1. <强> NSUserDefault

    // NSArray *temp = (NSArray *)responseObject;
    
    NSError *error;
    NSArray *temp = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:&error];
    
    [[NSUserDefaults standardUserDefaults] setObject:[[temp objectAtIndex:0] valueForKey:@"token"] forKey:@"token"];
    [self performSegueWithIdentifier:@"loginsegue" sender:self];
    
  2. 第二页

    <强>提取

    用于检索String中的NSUserDefaults,您可以直接使用objectForKey

    NSString *token = [[NSUserDefaults standardUserDefaults]objectForKey:@"token"];
    
    1. 将字符串传递给第二页,如
    2. 第一页创建一个全局值,用于将对象存储在字符串

      @property (strong, nonatomic)          NSString *tokenString;
      

      对响应对象进行serilize并将其存储在您需要的全局值中

                         NSError *error;
       NSArray *temp = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:&error];
      
           // in this line we assingn the current value to global value
           tokenString = [[temp objectAtIndex:0] valueForKey:@"token"];
            [self performSegueWithIdentifier:@"loginsegue" sender:self];
      

      在该目标视图控制器上创建一个全局值以传递当前字符串

      @property (strong, nonatomic)          NSString *fetchtokenString;
      

      在第一个VC上,prepareForSegue方法将全球化值传递给第二页

      -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
      
      secondViewController *vc = segue.destinationViewController;
      // pass the current object to second page value
      vc.fetchtokenString = tokenString;
      

      最后第二个VC你可以在viewDidload页面上获得值

      - (void)viewDidLoad
      {
      [super viewDidLoad];
      // Do any additional setup after loading the view.
       NSLog (@"token value ==%@",fetchtokenString);
      }
      

答案 1 :(得分:0)

您可以按照以下操作

像这样解析你的回复

variable

将您的令牌放在一个全局NSString *token = [json objectForkey:@"token"]; 假设

UIViewController

当您按下UIViewController时,请将此值设置为下一个property的属性。为此,您需要在下一个NSString中创建一个UIViewController类型@property(nonatomic, copy) NSString *token; ,例如:

UIViewController

首先在UIViewControler中访问该属性。 在推送下一个sectionViewControllerObject.token = token //variable of first UIViewController

之前,您必须添加以下行
import bs4
import requests
source = requests.get('https://www.youtube.com/feed/subscriptions')
sourceSoup = bs4.BeautifulSoup(source.text,'html.parser')
sourceSoup.select('#grid-319397 > li:nth-child(1) > div > div.yt-lockup-dismissable > div.yt-lockup-content > h3')
[]

答案 2 :(得分:0)

@ Anbu.Karthik如果您想将第一个视图控制器中的值发送到第二个视图控制器,那么您可以通过多种方式使用seguedelegate或{{1} }。

我正在使用 swift 进行只获取令牌数据,只需使用目标C尝试此操作。

NSnotification