swift iOS8:在TouchID身份验证后执行segue

时间:2014-09-29 16:02:08

标签: asynchronous swift ios8 segue touch-id

我有一个有两个视图的简单App。加载第一个视图后,我即可执行Touch ID传感器身份验证(另请参阅this问题):

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 {

使用此代码执行segue,但第二个视图只显示片刻,然后App返回到第一个视图。 似乎 canEvalutePolicy 中的代码未完成,因此导航控制器会推送第一个视图。

我尝试了几件事:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {

NSOperationQueue.mainQueue().addOperationWithBlock

还有这些方法的组合,但我无法将segue执行到第二个视图并保留在第二个视图中。

有人可以帮忙吗?

谢谢,最好的, 吉

1 个答案:

答案 0 :(得分:4)

我能够解决这个问题。问题是导航控制器。

我的解决方案:第一个视图不再嵌入导航控制器中,它只是一个第二个视图的segue。

然后第二个视图嵌入导航控制器(以及其他视图),以便在我想要的视图之间进行导航行为。

重要的是使用 dispatch_async ,以便在用户进行身份验证后立即“加载”导航控制器:

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

如果没有dispatch_async,则会出现第二个视图,但导航控制器的导航逻辑缺失大约15秒。