0

別のクラス「CoordinationController.h」があり、いくつかのプロトコルが含まれています

例:

@protocol CoordinationControllerDelegate <NSObject>

- (void)startScrollingUpToXPosition:(NSInteger)xPosition scrollingUpToYPosition:(NSInteger)yPosition;

@end

しかし、 「CoordinationController.m」ファイルは実装していません。しかし、このプロトコルは、私の「ControllerManager.m」クラスを除くすべてのviewControllerクラスに実装されています。

そして、「ControllerManager.h」クラスが1つあります。ここに、NSArray のコントローラー オブジェクトのリストがあります。

ControllerManager.h

@interface THSControllerManager : NSObject

{

    NSArray *_controllers;
} 

@end

ControllerManager.m

@interface ControllerManager ()

@property (nonatomic, retain) NSArray *controllers;

@end

@implementation ControllerManager

@synthesize controller = _controllers;


- (id)init

{

    self = [super init];
    if(self)
    {
         self.controllers = [NSArray arrayWithObjects:viewController1, viewController2, nil];
    }

}

@end

ここで、実装されたすべてのコントローラーに対してプロトコルを呼び出す必要があります。どうすれば達成できますか。

CoordinationControllerクラスでクラスのオブジェクトを作成する必要ControllerManagerがあるか、他の方法で親切に提案してください。同じ機能を実現する他の方法がありますので、コメントしてください。

4

1 に答える 1

0

CoordinationControllerインスタンス化する必要はありません。いくつかのプロトコルを含むファイルがあります。あなたの最善の選択肢は、おそらくプロトコルを使用して、コンパイラが実装されていることを確認する必要があるメソッドを定義することです。作成/設定するときに、実装さviewController1viewController2ているプロトコルを指定する必要があります。インスタンスを使用するときはrespondsToSelector:、必要なメソッドが実際に使用可能であることを確認するために使用する必要があります。

/ 代わりに使用することもできますconformsToProtocol:が、チェックを行う場合は、プロトコル自体ではなく、実際のメソッドに対して行うこともできます。

于 2013-10-24T13:26:53.033 に答える