1

iOS アプリのログイン画面を作成しようとしています。認証後に json を取得できましたが、認証後にログイン画面からダッシュボードに移動するためにセグエを呼び出そうとすると、機能しません。

私がふりをするのは、基本的なログインです。ユーザーは自分の API キーを入力に入力し、送信をクリックします。問題がなければ、dashboardViewController に移動します。

私のコードをチェックしてください:

- (IBAction)touchLogin:(id)sender {    

    NSURL *url = [NSURL URLWithString:@"https://api.site.com/"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request , NSHTTPURLResponse *response , id JSON)
    {
        NSLog(@"Got JSON: %@", JSON);
        [self performSegueWithIdentifier:@"LoginSuccesful" sender:self];
    }
    failure:^(NSURLRequest *request , NSHTTPURLResponse *response , NSError *error , id JSON){
        NSLog(@"Something went wrong. %@ - %@", [error localizedDescription], JSON);
    }];

    [operation setAuthenticationChallengeBlock:^(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge)
    {
        if (challenge.previousFailureCount == 0)
        {

            NSURLCredential *creds = [NSURLCredential credentialWithUser:self.apiKeyTextField.text
                                                                password:@""
                                                             persistence:NSURLCredentialPersistenceForSession];

            [[challenge sender] useCredential:creds forAuthenticationChallenge:challenge];
        }
        else
        {
            NSString *errorString = @"Incorrect API Key";
            UIAlertView *errorAlertView = [[UIAlertView alloc] initWithTitle:@"Error" message:errorString delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
            [errorAlertView show];

            NSLog(@"Previous auth challenge failed. Are username and password correct?");
        }
    }];

    [operation start];

}

セグエを作成し、「LoginSuccesful」という識別子を付けましたが、そのコード ブロック内でセグエを呼び出す必要があるかどうかわかりません。

アプリを実行すると、JSON で NSLog を取得しますが、セグエを実行しようとするとアプリがクラッシュし、エラーが表示されます

Terminating app due to uncaught exception 'NSGenericException', reason: 'Could not find a navigation controller for segue 'LoginSuccesful'. Push segues can only be used when the source controller is managed by an instance of UINavigationController.

しかし、私のストーリーボード ファイルを見ると、このセグエが作成されており、ナビゲーション コントローラーも配置されています。

ここに画像の説明を入力

誰かがすでにこの問題を抱えていましたか? 認証がOKになった後、別のViewControllerを呼び出す方法を誰かに教えてもらえますか?

エラーアラートビューでもこれが最善のアプローチかどうかはわかりませんが、うまく機能しています

4

2 に答える 2

2

最初のビュー コントローラーを選択します (スクリーンショットのように)。次に、メニューで、[エディター] -> [埋め込み] -> [ナビゲーション コントローラー] に移動します。これを行うと、2 番目のナビゲーション コントローラーは不要になります。View Controller と Table View Controller の間でセグエをドラッグできます。エラーからわかるように、問題は「ソース コントローラー」に「UINavigationController のインスタンス」がないことです。

于 2013-06-11T07:21:40.623 に答える
1

このエラーは、NavigationalController のルート ビューがメインの ViewController ではないことを示しています。

于 2013-06-11T20:49:35.437 に答える