ユーザー名とパスワードを入力する必要があるログイン画面を作成しようとしています。ログインボタンをクリックすると、詳細をサーバーに解析しています。コードはこちらjson解析中の制御フロー - 目的C
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"が "status"キーの値 "success"を持っているかどうかをチェックしたいと思います。だから私は次のコードで値を印刷しようとしました。
_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}
だ私はわからないが、私は構文解析が起こる前に、コードの最後の行が実行されていることを感じました。誰かがここでコントロールがどのように流れるのかを強調してもらえますかまたは、私のコードに何か問題がありますか?
を;'?ブロック 'session dataTaskWithRequest'またはその外側にありますか? – Ti3t
"resume"の直後。外部ブロック –
実行中の場合、ブロックが非同期に実行されるため、 '_requestReply'にはデータがありません。あなたはブロック内にそれらの2行を置く場合、それは動作します – Ti3t