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 のオブジェクトのようです。