0

FacebookSSOとSDKをプロジェクトに追加する作業をしています。私のメインのFacebookコードはすべて私のAppDelegate.mとにありAppDelegate.hます。[[[UIApplication sharedApplication] delegate] performSelector:@selector(callLogin)];私のビューでは、ボタンを押すとコントローラーが呼び出されます。私のcallLoginメソッドはAppDelegate.m次のようになります。

- (void)callLogin{

facebook = [[Facebook alloc] initWithAppId:@"XXXXX" andDelegate:self];

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"] 
    && [defaults objectForKey:@"FBExpirationDateKey"]) {
    facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
    facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
}

if (![facebook isSessionValid]) {
    [facebook authorize:nil];
    }
}

次に、私のメソッドで、ビューコントローラにある- (void)fbDidLoginメソッドを呼び出しますsetInfo

//this method is located in AppDelegate.m
- (void)fbDidLogin {
NSLog(@"FACEBOOK DID LOGIN");
ViewController * vc = [[ViewController alloc]init];
[vc setInfo]; 
}

最後に、-(void)setInfoこれが私のコードです。ViewController.m

-(void)setInfo{
infoL.text = [NSString stringWithFormat: @"Connected to Facebook!"];
NSLog(@"%@",infoL);
//NSLog returns null
} 

setInfoからラベルを変更できず、NSLoginfoLはnullを返します。ViewDidLoadなどのメソッドを使用してラベルを更新できますが、setInfoは更新できません。何が間違っているので、どうすれば修正できますか?

4

2 に答える 2

1

ナビゲーションスタックにないクラスのランダムなインスタンスを作成したため、ViewControllerは更新されません。私はあなたが呼ぶことができると思います

 [ self.viewController setInfo ]

これは、applicationDidFinishLaunchingWithOptionsでスタックにプッシュしたvcのプロパティ名であると想定していますが、これは優れた設計とは見なされません。Facebookデリゲートがアプリデリゲートを詰め込み、ビューコントローラーがフィードできるFacebookコントローラーシングルトンクラスを作成します。

于 2012-06-08T15:32:44.697 に答える
0

infoLはUILabelを表すと思います。このラベルをコードで作成しますか、それとも自動的に作成されるアウトレットですか?

コードでinfoLを作成する場合、どこに割り当て/開始されますか?setInfoメソッドが実行される前はいつでもnil以外ですか?

于 2012-06-07T16:58:07.943 に答える