2017-05-25 5 views
-1

私は2つのクラスを持っています。一つはビューコントローラ、もう一つは非同期プロセスを実行するNSObjectクラスです。 IBAction、UIを更新します。私は、この機能をモジュール化して、後の段階で使いやすくしたかったのです。 Objective-cでこれを行う方法はありますか?別のクラスが必要なデータを処理し終わったときにViewControllerを中断する方法

CircleDetectionViewController.h:

#import <UIKit/UIKit.h> 
#import "CameraController.h" 



@interface CircleDetectionViewController : UIViewController <MyDelegate> 
@property (weak, nonatomic) IBOutlet UIImageView *screenPreview; 

@end 

CircleViewController.mm:

@interface CircleDetectionViewController() <CvVideoCameraDelegate> 

@end 

@implementation CircleDetectionViewController 
CvVideoCamera *camera; 
//code 
@end 

CameraController.h:

#import <Foundation/Foundation.h> 
#import <AVFoundation/AVFoundation.h> 
#import "CircleDetectionViewController.h" 

@protocol MyDelegate <NSObject> 

-(void) updateUI; 
@end 

@interface CameraController : NSObject <MyDelegate> 
@property (nonatomic, strong) AVCaptureDevice *inputDevice; 
@property (nonatomic, strong) AVCaptureSession *session; 
@property (nonatomic, strong) AVCaptureStillImageOutput *photoOutput; 
@property (nonatomic, weak) id <MyDelegate> delegate; 
@end 

CameraController.m:

#import "CameraController.h" 
#import "FlashHelper.h" 
#import "ImageProcessor.h" 

@implementation CameraController 
@synthesize delegate; 
FlashHelper *Flash; 
ImageProcessor *IMGProcessor; 
int shootCounter; 
int NUMSHOTS = 2; 

-(id)init{ 
//code 
} 

何らかの理由でコードに「MyDelegateという名前のプロトコルまたはプロトコルがありません」というメッセージが表示されます NSObjectクラスで

+0

デリゲートまたはコールバック/完了ブロックを使用します。それはあなたがGoogleを簡単に理解し、理解した上で使用できる用語でなければなりません。 – luk2302

+1

デリゲートパターンの完璧な時間! https://developer.apple.com/library/content/documentation/General/Conceptual/CocoaEncyclopedia/DelegatesandDataSources/DelegatesandDataSources.html – DonMag

+0

私のビューコントローラにはすでにopenCVのデリゲートが使用されています。自分のカスタムデリゲートを引き続き使用できますか? –

答えて

-1

は、デリゲートを作成します。

@protocol MyDelegate <NSObject> 

-(void) updateUI; 
@end 

をとのViewControllerクラスでデリゲート

@property (nonatomic, weak) id <MyDelegate> delegate; 

のプロパティを宣言

NSObjectクラスobj.delegate = self; 委譲クラスを呼び出すと、デリゲートを実装方法。

常にメインスレッドからUIを更新してください。このメインスレッドの使用を取得するには

:デリゲートメソッドの詳細について

dispatch_async(dispatch_get_main_queue(), ^{ 
    // call your delegate method or update UI here 
}); 

thisをご確認ください。

+0

私がデリゲートで持っている問題は、ビューコントローラにはすでにデリゲートがopenCVカメラを使用しているということです.2人のデリゲートを使用する方法はありますか? –

+0

私の心配を表示するようにコードを更新しました –

+0

UIViewController のような1つのビューコントローラで複数のデリゲートを呼び出すことができます。また、NSNotificationCenterを使用して同じ目的を達成できます。 –

関連する問題