如何在使用facebook-ios-sdk登录时访问appDelegate中的另一个UIViewController?

问题描述:

答案:如何在使用facebook-ios-sdk登录时访问appDelegate中的另一个UIViewController?

最后我用,我认为这是一个优雅的方式来做到这一点的通知。

谢谢你Alan。


我有我的基于标签的应用程序中的Facebook登录(通过facebook-ios-sdk)。

我在我的appDelegate中初始化“Facebook”。

我在settingViewController Tab中有一个“连接Facebook”的UIButton。

我可以通过点击“Connect Facebook”UIButton(在settingViewController标签中),然后调用“ - (void)fbDidLogin”(在appDelegate中)登录Facebook。

一切都很好。

但我的问题是如何更新“连接Facebook”UIButton(在settingViewController标签)“Facebook连接”?

我可以做这样的事情在的appDelegate:

- (void)fbDidLogin 
{ 
    NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults]; 
    [userDefaults setObject:[self.facebook accessToken] forKey:@"FBAccessTokenKey"]; 
    [userDefaults setObject:[self.facebook expirationDate] forKey:@"FBExpirationDateKey"]; 
    [userDefaults synchronize]; 

    if (settingViewController) { 
     settingViewController.facebookButton.text = @"facebook connected"; 
    } 
} 

谢谢你。


我曾尝试:

我把这个settingViewController标签,但这不叫当从Facebook登录屏幕应用的回报。所以我想我可能不得不在appDelegate中的“ - (void)fbDidLogin”中使用委托?

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    [self checkAccStatusAndUpdateButton]; 
} 

有几种方法可以解决这个问题。这里有几个:

NSUserDefaults的 Facebook的连接时,您可以存储一个标志NSUserDefaults。在viewDidLoad方法SettingViewController中,您可以检查该标志并在标题中进行相应更改。

通知fbDidLogin方法,你可以触发一个NSNotification;并且您的SettingViewController可以观察到该通知并更改按钮标题。该方法假定SettingViewController实例存在并可以观察通知。

+0

谢谢@alan,我使用NSUserDefaults,但我不知道如何使SettingViewController从Facebook登录返回后检查它,因为 - (void)viewWillAppear:(BOOL)动画不会被触发。 (为什么) – ThinkChris 2012-03-14 03:14:10

+1

这取决于您的视图层次结构的构建方式。这听起来像你有一个'UITabBarController' ...在它的'tabBarController:didSelectViewController'委托方法中,你可以将FB标志设置传播给'SettingViewController'。有关何时调用'viewWillAppear'的更多信息,请参见[this question](http://*.com/questions/131062/iphone-viewwillappear-not-firing) – FluffulousChimp 2012-03-14 03:25:17