2016-09-08 1 views
1

私のコードでローカル認証フレームワークを実装しましたが、私のViewControllerにメソッドを追加しましたが、MVCパターンをより効果的に取り入れるようにリファクタリングします。コードをNSObjectに移動して別々に呼び出したいのですが、私は2つの問題に遭遇しています。クリーナーコード用のローカル認証フレームワークをリファクタリングする

参考のために、これは私が実装してるのコードです:https://developer.apple.com/library/ios/documentation/LocalAuthentication/Reference/LocalAuthentication_Framework/

まず問題は、私はUIButtonのタッチでそれをテストする際にコードが発射されていないということであり、第二の問題は、私はperformSegueWithIdentifierを呼び出したいということです成功したが、私はそれを呼び出すUIViewControllerが必要です。だから、これは私が最初に試したものです:

Authenticate.h  
@interface Authenticate : NSObject 
- (void)startAuthenticating; 

Authenticate.m 
@implementation Authenticate 
- (void)startAuthenticating{ 
    LAContext *myContext = [[LAContext alloc] init]; 
    NSError *authError = nil; 
    ...       
    if (success) { 
     [self performSegueWithIdentifier: @"Success" sender:nil]; 
    ... 
    } ... 
    } 

^[自己performSegueは...]私は理解しており、ここでエラーをスローしていました。

#import "Authenticate.h" 
ViewController.h 
@interface ViewController : UIViewController 
@property(nonatomic, strong) Authenticate *touchID; 

ViewController.m 
@implementation ViewController 
- (void)viewDidLoad{ 
    ... 
    [self.touchID startAuthenticating]; 
    }  

私もそれはそれは保持サイクルのように見えても [self.viewController performSegue...]なったAuthenticate.hに #import "ViewController.h"にしようとした @property(nonatomic, weak) ViewController *viewController; を追加し、代わりに[self performSegue...]の。

現在のところ、ローカル認証フレームワークを別のUIViewControllerに実装してコードをリファクタリングし、そのAuthenticationViewControllerの下にあるメインViewControllerをサブクラス化しましたが、それは私の目指すものではないので、私にとってはうんざりです。誰かが私にこれをより良い方法で達成する方法を教えてもらえますか?

答えて

0

あなたのコードが発砲していない理由はわかりません。しかし、第二の問題については、以下のような何か:認証クラスで

- (void)startAuthenticatingWithCompletion:(void (^)(BOOL success, NSError *error))completion{ 
    LAContext *myContext = [[LAContext alloc] init]; 
    NSError *authError = nil; 

    if (success) { 
     completion(YES, nil); 
     //[self performSegueWithIdentifier: @"Success" sender:nil]; 

    } else { 
     completion(NO, authError); 
    } 
} 

、などの方法を書いてのViewControllerクラスで、同様

[self.touchID startAuthenticatingWithCompletion:^(BOOL success, NSError *error) { 
     if (success) { 
      [self performSegue...]; 
     } 
    }]; 
のメソッドを呼び出します
関連する問題