0

アプリのログイン システムに問題があります。

アプリを最初に開いたときは、FVC がメインのビュー コントローラーです。次に、FVC はログインしているかどうか、セッション キーがまだ有効かどうかをチェックします。そうでない場合は、LoginViewController が画面全体にポップアップ表示され、ログインを続行する必要があります。正しいユーザー名とパスワードでログインすると、Web 上の JSON ファイルをすばやくチェックし、エラーが返されなければセッション キーを返します。問題は、NSLogでいくつかのテストを行ったときにJSONファイルを正しく取得して解析していることを知っていますが、正しい情報でログインするとすぐにloginViewを閉じ、0.5秒間メインビューを表示し、次にloginView がポップアップ表示されます。何かが正しくありません。コードの問題を見つけていただければ幸いです。マイケル。

最初のView Controller:

 - (void)viewDidAppear:(BOOL)animated
{
//Put login check here.
LoginViewController *login = [self.storyboard instantiateViewControllerWithIdentifier:@"login"];

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

// create the URL we'd like to query

[[NSURLCache sharedURLCache] removeAllCachedResponses];

myURL = [[NSURL alloc]initWithString:[NSString stringWithFormat:@"%@%@", @"https://URL/v1/?get&action=getservers&session_key=", login.sessionKey]];

// we'll receive raw data so we'll create an NSData Object with it
NSData *myData = [[NSData alloc]initWithContentsOfURL:myURL];

// now we'll parse our data using NSJSONSerialization
id myJSON = [NSJSONSerialization JSONObjectWithData:myData options:NSJSONReadingMutableContainers error:nil];

// typecast an array and list its contents
NSDictionary *jsonArray = (NSDictionary *)myJSON;

NSLog(@"%@",[jsonArray objectForKey:@"status"]);

if ([[jsonArray objectForKey:@"status"] isEqualToString:@"ERROR"]) {

    [self presentViewController:login animated:NO completion:nil];
}


[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

}

ログイン ビュー コントローラ:

- (IBAction)loginAction:(id)sender {
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

// create the URL we'd like to query
NSURL *myURL = [[NSURL alloc]initWithString:[NSString stringWithFormat:@"%@%@%@%@", @"https://URL/v1/?get&action=login&username=", usernameField.text, @"&password=", passwordField.text]];

// we'll receive raw data so we'll create an NSData Object with it
NSData *myData = [[NSData alloc]initWithContentsOfURL:myURL];

// now we'll parse our data using NSJSONSerialization
id myJSON = [NSJSONSerialization JSONObjectWithData:myData options:NSJSONReadingMutableContainers error:nil];

// typecast an array and list its contents
//NSArray *jsonArray = (NSArray *)myJSON;
NSDictionary *jsonArray = (NSDictionary *)myJSON;

NSLog(@"%@",[jsonArray objectForKey:@"status"]);

if ([[jsonArray objectForKey:@"status"] isEqualToString:@"OK"]) {
    FirstViewController *dashView = [self.storyboard instantiateViewControllerWithIdentifier:@"dashView"];

    sessionKey = [jsonArray objectForKey:@"new_session_key"];
    NSLog(@"%@",sessionKey);

    [self dismissViewControllerAnimated:YES completion:nil];
} else {

}

[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

}
4

1 に答える 1

1

問題は だと思いますlogin.sessionKey。それにNSLogを実行します。おそらくゼロです。どこに設定しているのかわかりません。おそらく、Web サービスからエラーが発生します。見てみな。

于 2013-08-08T21:20:53.750 に答える