1

2 つのビューを持つシンプルなアプリがあります。最初のビューが読み込まれるとすぐに、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 {

このコードではセグエが実行されますが、2 番目のビューが一瞬だけ表示された後、アプリは最初のビューに戻ります。canEvalutePolicy内のコードが完成していないようで、ナビゲーション コントローラーが最初のビューをプッシュします。

次のようないくつかのことを試しました:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {

NSOperationQueue.mainQueue().addOperationWithBlock

また、これらの方法の組み合わせもありますが、2 番目のビューへのセグエを実行して 2 番目のビューに留まることはできません。

誰でも助けることができますか?

ありがとう、グイド

4

1 に答える 1

4

この問題を解決できました。問題はナビゲーションコントローラーでした。

私の解決策: 最初のビューはナビゲーション コントローラーに埋め込まれなくなりました。2 番目のビューへのセグエがあるだけです。

次に、必要なビュー間のナビゲーション動作を実現するために、2 番目のビューが (他のビューと共に) ナビゲーション コントローラーに埋め込まれます。

重要なのは、ユーザーが認証されるとすぐにナビゲーション コントローラーを「ロード」するために、dispatch_asyncを使用することです。

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

dispatch_async がないと、2 番目のビューが表示されますが、ナビゲーション コントローラーのナビゲーション ロジックが約 15 秒間失われます。

于 2014-10-06T14:00:18.543 に答える