2

以下のように .m ファイルにコードがあります。

- (IBAction)btnLogin:(UIButton *)sender 
{

    NSString *strURL = [NSString stringWithFormat:@"http://www.myworkingdomain.com/fn_checkLogin2.php?name=%@&pass=%@", self.email.text, self.password.text];

    // to execute php code
    NSData *dataURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL]];

    // to receive the returend value
    NSString *strResult = [[[NSString alloc] initWithData:dataURL encoding:NSUTF8StringEncoding]autorelease];


    if ([strResult isEqualToString:@"0"]) {
        UIStoryboard *loginFailStoryBoard = [UIStoryboard storyboardWithName:@"loginFailStoryboard" bundle:nil];
        UIViewController *initialFailLogin = [loginFailStoryBoard instantiateInitialViewController];
        initialFailLogin.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        [self presentModalViewController:initialFailLogin animated:YES];
        //NSLog(@"%@", strResult); 
    } else {
        UIStoryboard *memberMenuBoard = [UIStoryboard storyboardWithName:@"memberMenuStoryboard" bundle:nil];
        UIViewController *initialMemberMenu = [memberMenuBoard instantiateInitialViewController];
        initialMemberMenu.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        [self presentModalViewController:initialMemberMenu animated:YES];
        //NSLog(@"%@", strResult);
    }

    NSLog(@"%@", strResult);


}
@end

人が正しい電子メールとパスワードを入力したかどうかを判断してから、次のビューに移動しようとしています。ログに が'strResult'あり、php スクリプトが正しく機能していることを示しています。if..else一部の理由で機能していないステートメントが表示されるようになりました[strResult isEqualToString:@"0"]

メンバーが正しいパスワードでログインしたときにメンバー ビューに移動できるようにするには、どこを変更すればよいかアドバイスをいただけますか?

ありがとう

4

1 に答える 1

0

@dan メインスレッドは、すべての UI 要素が表示される場所です。メイン スレッドで接続を開始すると、接続が解決されるまで UI が応答しなくなります (ボタンを押すことができない、スクロールできないなど)。これを回避するには、別のスレッドを使用する必要があります。他の方法もありますが、次のコードは UI をブロックせずにトリックを実行する必要があります。

    NSString *loginString =[NSString stringWithFormat:@"fn_checkLogin2.php?name=%@&pass=%@", self.email.text, self.password.text];

    NSURL *url = [NSURL URLWithString:@"http://www.myworkingdomain.com/"];
    NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url ];

    [urlRequest setTimeoutInterval:30.0f];
    [urlRequest setHTTPMethod:@"POST"];
    [urlRequest setHTTPBody:[loginString dataUsingEncoding:NSUTF8StringEncoding]];

    NSOperationQueue *queue= [[NSOperationQueue alloc] init];

    [NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){
        if ([data length]>0 && error==nil) {
            NSString *html = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"HTML = %@",html);
        }
    }
     ];

したがって、データが返された場合は何かを行うことができ、接続が失敗した場合は、UI をブロックすることなく他のことを行うことができます。

于 2013-03-19T14:27:41.137 に答える