iOS 8 Touch ID ошибка «Требуется взаимодействие с пользователем.»

Я работаю над интеграцией поддержки Touch ID в приложение, над которым работаю. Это, однако, действует очень противоречиво. Одна из распространенных проблем, с которыми я сталкиваюсь, - это запуск нового приложения, которое работает, как и ожидалось, но затем при создании фонового приложения и выводе его на передний план я получаю сообщение об ошибке

evaluatePolicy:localizedReason:reply:

Это даже не имеет большого смысла (я никогда не вижу осязание)

Error Domain=com.apple.LocalAuthentication Code=-1004 "User interaction is required." UserInfo=0x171470a00 {NSLocalizedDescription=User interaction is required.}

Я попытался представить предупреждение о прикосновении, когда приложение уже запущено, когда оно только что создано, кажется, не имеет значения. Он не работает каждый раз после первого запуска приложения.

Кто-нибудь еще сталкивался с этим?

Для справки вот код, который я использую:

if (_useTouchId && [LAContext class]) {
    LAContext *myContext = [[LAContext alloc] init];
    NSError *authError = nil;

    if ([myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&authError]) {
        _didPresentTouchId = YES;
        [myContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"Use your Touch ID to open *****" reply:^(BOOL success, NSError *error) {
            dispatch_async(dispatch_get_main_queue(), ^ {
                if (success) {
                    _isClosing = YES;

                    [self hide];
                    if (_successBlock) {
                        _successBlock();
                    }
                }
                else if (error && error.code != -2 && error.code != -3 && error.code != -1004) {
                    [[[UIAlertView alloc] initWithTitle:@"Error" message:@"Authentication failed, please enter your Pin" delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:nil] show];
                }
                else {
                    if (error) {
                        DDLogError(@"TouchID error: %@", error.description);
                    }

                    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, .6 * NSEC_PER_SEC), dispatch_get_main_queue(), ^ {
                        [self keyboardButtonTouched];
                    });
                }
            });
        }];
    }
}

Ответы на вопрос(2)

Ваш ответ на вопрос