こんにちは、私は本当に理解できない奇妙な動作を経験しています。
Touch ID ID をユーザーに提示し、承認されている場合は [self performSegueWithIdentifier: @"callCustomSegue" sender:self]; を呼び出します。このようにブロック内で:
[myContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
localizedReason:myLocalizedReasonString
reply:^(BOOL success, NSError *error) {
if (success) {
[self performSegueWithIdentifier: @"callCustomSegue" sender:self];
その後、アプリは数秒間 (少なくとも 3 ~ 4 秒間) 停止し、次の ViewController が表示されます。
「callCustomSegue」によって呼び出される実行は、これを行います。
- (void) perform {
src = (UIViewController *) self.sourceViewController;
dst = (UIViewController *) self.destinationViewController;
[src.view addSubview:dst.view];
}
タッチ ID の識別と performSegueWithIdentifier の間で何が起こっているのか、アプリが停止する理由がわかりません。
タッチ ID をバイパスして performSegueWithIdentifier を呼び出すと、予想どおりすぐに機能します。
タッチIDブロックを入れると:
[myContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
localizedReason:myLocalizedReasonString
reply:^(BOOL success, NSError *error) {
if (success) {
authenticated = YES;
[self showMessage:@"Authentication is successful" withTitle:@"Success"];
}
showMessage は次のようにします。
UIAlertController * alert= [UIAlertController
alertControllerWithTitle:title
message:message
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* cancel = [UIAlertAction
actionWithTitle:@"OK"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
{
[alert dismissViewControllerAnimated:YES completion:nil];
if (authenticated) {
[self performSegueWithIdentifier: @"callCustomSegue" sender:self];
}
if (!authenticated) {
[self touchID];
}
}];
[OK] をタップすると、次の ViewController がすぐに呼び出されます。
問題は、タッチ ID ブロック内で performSegue を呼び出してすぐに応答を得られないのはなぜですか?
私が間違っている場所はありますか?
どうもありがとう。