2012-05-10 8 views
1

これは私のプロトコルです。私のプロトコルメソッドのセレクタのインスタンスメソッドは知られていません

@protocol UCMapviewDelegate <NSObject> 
@required 
- (void)slideMapviewIn:(id)sender; 
- (void)slideMapviewOut:(id)sender; 


@end 

これは、メソッドが(UCMapViewController.mでは)呼び出されるはずです。 showMenuはボタンから呼び出されます。

- (void)showMenu 
{ 
    // TODO: 
    if (self.isMapViewPushedAside) { 
     [self.delegate slideMapviewOut:self]; 
    } [self.delegate slideMapviewIn:self]; 

} 

これはデリゲートが初期化されたことです。 UCMapViewControllerオブジェクトの初期化子。

- (id)initWithDelegate:(UCRootViewController *)controller 
{ 
    self = [super init]; 
    if (self) { 
     // Custom initialization 
     self.delegate = controller; 
    } 
    return self; 
} 

が、私はそれを呼び出すためにデリゲートを使用したいとき、私はエラーを取得:No known instance method for selector 'slideMapviewIn:'。これについて私は何ができますか?

+0

オブジェクトをどのように作成し、そのオブジェクトのメソッドを呼び出すかを示します。 – borrrden

+0

updated私の投稿 – MJB

+0

'id '型の 'delegate'はありますか? –

答えて

3

問題は、そのプロトコルの実装として代理人を宣言していないことです。あなたがそれをしなければ、それがそのプロトコルを実装していることをどのように知っていると思われますか?そのエラーは当然です。

id<UCMapviewDelegate>と宣言し、そのプロトコルを含むヘッダーをインポートする必要があります。

+0

しかし、私はプロトコルを実装するファイルにヘッダーをインポートする必要があると思いますか? – MJB

+0

いいえ、プロトコルを実装するオブジェクトを持っているすべてのファイルはそれを処理する方法を知っている必要があります。クラス関数を使用するためにクラスヘッダをインポートするのと同じことです。オブジェクト)のヘッダをインポートする必要があります – borrrden

+0

ありがとうございました – MJB

関連する問題