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を呼び出す方法を誰かに教えてもらえますか?
エラーアラートビューでもこれが最善のアプローチかどうかはわかりませんが、うまく機能しています