我正在尝试创建一个登录屏幕,其中必须输入他的用户名和密码。在单击登录按钮时,我正在将详细信息解析到服务器。这是代码
NSString *post = [NSString stringWithFormat:@"username=%@&password=%@",[_userNameText text],[_passwordText text]];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%lu" , (unsigned long)[postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"http://*******/*****/******/userLogin.php"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"sample data"];
[request setHTTPBody:postData];
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
[[session dataTaskWithRequest:request completionHandler:^(NSData *data , NSURLResponse *response , NSError *error){
_requestReply = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"%@",_requestReply);
}] resume];
到目前为止,代码的工作方式与预期一致。现在我想检查" requestReply"从服务器返回的值为"成功"因为它的状态"键。所以我尝试使用以下代码打印它的值。
_responseData = _requestReply;
NSLog(@"%@" , _responseData[@"status"]);
这是控制台输出
2016-10-21 06:44:03.424 QuizApp2[65724:1287972] (null)
2016-10-21 06:44:03.501 QuizApp2[65724:1288003] {"status":"success","message":"Welcome admin","code":true}
我不确定,但我觉得代码的最后一行是在解析发生之前执行的。有人可以突出控制如何在这里流动吗?或者我的代码有什么问题吗?
答案 0 :(得分:2)
我没有看到任何关于解析数据的代码。你的意思是这一行
_requestReply = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
如果userLogin.php返回JSON数据,请执行以下操作:
[[session dataTaskWithRequest:request completionHandler:^(NSData *data , NSURLResponse *response , NSError *error){
NSError *err = nil;
id jsonData = [NSJSONSerialization JSONObjectWithData:data options:0 error:&err];
if (err) {
NSLog(@"%@", err);
}
else {
NSLog(@"%@", jsonData[@"status"]);
}
}] resume];