UILabel在Facebook登录后变为空(UILabel剂量不更新)



我正在努力将facebook SSO和SDK添加到我的项目中。我所有主要的Facebook代码都在我AppDelegate.mAppDelegate.h中。在我的视图控制器中,当我按下按钮时会调用[[[UIApplication sharedApplication] delegate] performSelector:@selector(callLogin)];。我的AppDelegate.m中的 callLogin 方法如下所示:

- (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 我无法更改标签,NSLog 返回infoL为空。我可以通过ViewDidLoad等方法更新标签,但不能通过setInfo。我做错了什么,我该如何解决这个问题?

视图控制器不会更新,因为您刚刚创建了不在导航堆栈上的类的某个随机实例。我想你可以打电话

 [ self.viewController setInfo ]

假设这是您在applicationDidFinishLaunchingWithOptions中推送到堆栈上的VC的属性名称,尽管这不会被认为是伟大的设计。Id 因素 Facebook 委托出应用程序委托,创建一个 Facebook 控制器单例类,您的视图控制器可以馈送该类

我假设infoL代表一个UILabel。 您是在代码中创建此标签还是自动创建的插座?

如果您在代码中创建 infoL,它在哪里分配/初始化? 在 setInfo 方法运行之前的任何时间它是否为非 nil?

最新更新