2012-04-11 9 views
0

私はユーザにログイン画面を表示できるように作成されたカスタムUISplitViewControllerを持っています。このコントローラには、ログアウト方法もあります。UISplitViewControllerセレクタがMasterViewControllerから認識されない

ログアウトボタンは、MasterViewControllerのナビゲーションバーにあります。ユーザーがログアウトをクリックすると、UISplitViewControllers logoutUserメソッドを呼び出そうとしています。まず、私が試した:コンパイルしようとしたときに

[self.splitViewController logoutUser:self]; 

これはエラーを与えた:

「をUISplitViewController」の目に見える@interfaceは、セレクタ「logoutUser:」を宣言していません 私は、問題のある行をコメントアウトし、次を追加しましたもし、実際に私のUISplitViewControllerがセレクタに応答するかどうかを調べる。

if([self.splitViewController respondsToSelector:@selector(logoutUser:)]){ 
    // [self.splitViewController logoutUser:self]; 
    NSLog(@"Selector"); 
}else{ 
    NSLog(@"No Selector"); 
} 

実行時のログでは、セレクタを取得します。 [self.splitViewController logoutUser:self]のコメントを解除します。同じエラーが表示されます。

ビルドをクリーンアップして再構築しようとしましたが、まだこのエラーが発生しています。どのように私はこの問題を解決するか?

おかげで、 ブルース

答えて

-1

としては、私は答えが見つかった、上記コメントインポートされるいくつかのヘッダーの一部のクラスで)。

  1. あなたがメソッドを含むヘッダをインポートしませんでした:

    あなたが参照している二つの問題があるかもしれません。 (宣言されているクラスは、現在呼び出すクラスと同じである必要はなく、のどこかでと宣言する必要があります)。この場合、メソッドが次のように警告されます。このメソッドがタイプidを返すと仮定します。カスタムビューコントローラーのヘッダーをインポートすることでこれを修正できます。 self.splitViewController以来

  2. UISplitViewController *を入力し、logoutUser:UISplitViewControllerの方法ではありません、あなたはそれがそのメソッドに応答しない場合が警告(ないエラー)を得ることができます。 UISplitViewController *は具体的な型であるため、静的型チェックの結果です。どちらでも修正できます

    1. エンリケの答えが示唆するように、この方法をサポートするタイプにキャストしてください。または
    2. タイプidにキャストするので、静的タイプのチェックは行われません。

    [(id)self.splitViewController logoutUser:self];

1

self.splitViewControllerが基本splitViewControllerであり、コンパイラがlogoutUser方法を見つけることができないようです。ただし、実行時にsplitViewControllerはメソッドに応答できます。 splitViewControllerがカスタムであると述べたので、カスタムコントローラにキャストしてみてください:

[(yourCustomViewController *)self.splitViewController logoutUser:self];

[self.splitViewController performSelector:@selector(logoutUser:) withObject:self]; 
+0

私はそれは同じエラーを与えてみました。しかし、より多くのグーグルの後、私は以下を使用できることがわかりました:[self.splitViewController performSelector:@selector(logoutUser :) withObject:self]; – brucemartin

+0

@ user207788:カスタムビューコントローラのヘッダをインポートするのを忘れたのですか? – user102008

1

任意のメッセージであれば、方法は、すなわち、(現在のスコープ内のどこかに宣言されているように、それが宣言され、Objective-Cで任意のオブジェクトに送信することができる。

関連する問題