swift iOS8: выполнить переход после аутентификации TouchID

У меня есть простое приложение с двумя представлениями. Как только загружается первое представление, я выполняю аутентификацию сенсора Touch ID (см. также этот вопрос):

func testTouchID()
{
  if touchIDContext.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, error:&touchIDError) 
  {
    touchIDContext.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: reasonString, reply: {
    (success: Bool, error: NSError?) -> Void in
      if success 
      {
        self.performSegueWithIdentifier("showSecondView", sender: self)
        return;
} else {

С помощью этого кода выполняется переход, но на мгновение появляется второе представление, а затем приложение возвращается к первому представлению. Похоже, что код внутри canEvalutePolicy не закончен, поэтому контроллер навигации выдвигает первое представление.

Я пробовал несколько вещей, таких как:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {

NSOperationQueue.mainQueue().addOperationWithBlock

А также комбинации этих методов, но я не могу выполнить переход ко второму представлению и остаться во втором представлении.

Кто-нибудь может помочь?

Спасибо и всего наилучшего, Гвидо


person Guido Lo Spacy    schedule 29.09.2014    source источник


Ответы (1)


Я смог решить эту проблему. Проблема была в навигационном контроллере.

Мое решение: первое представление больше не встроено в навигационный контроллер, оно просто переходит ко второму представлению.

Затем второе представление встраивается в контроллер навигации (вместе с другими представлениями), чтобы иметь поведение навигации между представлениями, которое мне нужно.

Важно использовать dispatch_async для «загрузки» навигационного контроллера, как только пользователь аутентифицируется:

if success {
  dispatch_async(dispatch_get_main_queue()) {
    self.performSegueWithIdentifier("xxx", sender: self)

Без dispatch_async появляется второе представление, но навигационная логика навигационного контроллера отсутствует примерно на 15 секунд.

person Guido Lo Spacy    schedule 06.10.2014