いくつかのこと。
-アプリケーション全体の 1 か所に fbDidLogin を実装するだけで済みます。facebook を使用する各ビュー コントローラーには実装しません。
- Facebook の iOS ドキュメントの入門手順に従っていると仮定すると、Facebook オブジェクトはアプリ デリゲートのプロパティとして存在します。そして、あなたの fbDidLogin メソッドはあなたのアプリデリゲートだけにあります。これは、Facebook 変数を宣言するコード内の唯一の場所でもあります。つまり、コード内の他の場所から facebook にアクセスするときはいつでも、次のようにします。
ProjectNameAppDelegate *appDelegate = (ProjectNameAppDelegate *)[UIApplication sharedApplication].delegate;
[appDelegate.facebook someMethod];
-アプリ デリゲートの handleOpenURL メソッドと openURL メソッドは、投稿したコードとは異なり、Facebook のサンプル ドキュメントとまったく同じように見える必要があります。
-個人的には、Facebook オブジェクトをアプリ デリゲートからシングルトン ヘルパー クラスに移動することを好みますが、初心者の場合、これはおそらく必要以上に高度です。
更新された情報回答コメント:
-someMethod は、呼び出そうとしている Facebook メソッド (ウォールへの投稿、認証など) です。
- すべての FBSessionDelegate メソッドをアプリのデリゲートに配置する必要があります
- Facebook に投稿するビュー コントローラーに FBDialogDelegate を実装する必要があります。
-次に、ユーザーのウォールに投稿したい場合は、View Controller で次のようにします。
- (void)postToWall {
ProjectNameAppDelegate *appDelegate = (ProjectNameAppDelegate *)[UIApplication sharedApplication].delegate;
if (appDelegate.facebook.isSessionValid) {
//we're logged in so call the post dialog
[self doPost:nil];
} else {
//we're not logged in so call the login and then do the post when it's done
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doPost:) name:@"FBLoginComplete" object:nil];
NSArray *permissions = [[NSArray alloc] initWithObjects:
@"offline_access",
@"publish_stream",
nil];
[appDelegate.facebook authorize:permissions];
[permissions release];
}
}
-(void)doPost:(NSNotification *) notification {
ProjectNameAppDelegate *appDelegate = (ProjectNameAppDelegate *)[UIApplication sharedApplication].delegate;
if (appDelegate.facebook.isSessionValid) {
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
something, @"app_id",
something, @"link",
something, @"picture",
something, @"name",
something, @"caption",
something, @"description",
nil];
[appDelegate.facebook dialog:@"feed" andParams:params andDelegate:self];
[params release];
}
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
-上記を機能させるには、ログインが完了するたびに (成功または失敗)、NSNotificationCenter メッセージ「FBLoginComplete」を送信する必要があります。
-注: 上記のコードは、コンパイルもテストもせずに書いたので、完璧ではないかもしれません (しかし、通常は :)
-注意: ポップアップするダイアログなしで、ユーザーのウォールに直接投稿することはできません。ユーザーは、壁にぶつかる前に投稿を編集することができます。