0

Facebook の指示 (http://developers.facebook.com/docs/howtos/login-with-facebook-using-ios-sdk/) に従い、Facebook のログイン ボタンを実装してみます。ただし、アプリケーション デリゲート メソッドを呼び出そうとすると、「認識されないセレクターがインスタンスに送信されました」というエラーが表示されます。

メソッド:

- (IBAction)pressFBLogin:(id)sender {
    MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
    [appDelegate openSessionWithAllowLoginUI:YES];
}

エラーから、間違ったインスタンスを指しているメモリポインタエラーだと思います。ブレークポイントを次の場所に設定しました。

MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];

このステートメントに到達したので、アクション バウンドに問題はありません。次のステートメントを実行しようとすると、エラーが表示されます。

[appDelegate openSessionWithAllowLoginUI:YES];

ウォッチ ウィンドウから、デバッグを行っているときに奇妙に思えることが 1 つあります。それは、appDelegate 変数です。ブレークポイントが

MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];

変数は次のように表示されます。

appDelegate = (MyViewController *)0x003b9a10
> UIViewController(UIViewController)
> delegate = (objc_object *) 0x0033edb0

変数の代入後、ブレークポイントは

[appDelegate openSessionWithAllowLoginUI:YES];

変数は次のように表示されます。

appDelegate = (MyViewController *)0x00316480
> UIViewController(UIViewController)
> delegate = (objc_object *) 0x00000000

どちらの段階でも、appDelegate は MyAppDelegate のオブジェクトのようです。

4

2 に答える 2

2

問題を解決しました。appDelegate 変数に問題はありません。問題は非常に単純です。私のヘッダーと openSessionWithAllowLoginUI 関数の実装ファイルの間の小さなタイプミスです。このような問題は通常、コンパイル時にエラーとして検出されます。そのような問題でビルド エラーが発生せず、実装が不完全であるという警告が表示されることに驚きました...

于 2012-10-04T02:09:57.327 に答える