我的应用允许用户通过Facebook登录。按登录按钮可将用户重定向到Safari / Facebook应用程序(FBSDK默认设置)。登录完成后,用户将被重定向回我的应用程序。在活动的Facebook会话期间,用户应该在UITavleView
小区中看到来自Facebook的个人资料图片和用户名。问题是重定向后单元格没有更新,我需要在登录过程后手动调用tableView.reloadData()
,以便表格正确显示。
我已尝试覆盖ViewController's
viewDidAppear()
方法,但应用之间的转换不会调用此方法。我还尝试了一个每x秒重新加载表数据的计时器,但这不是我的问题的真正解决方案。我还想过使用一些app delegate的方法,但这似乎也是一种不好的做法。有人知道吗?我试图在FBSDK文档中查找类似于UIWebView's
didFinishLoading()
的方法,但没有找到任何有价值的方法。
答案 0 :(得分:1)
信任用户离开您的应用程序并登录到FB然后返回,您可以利用AppDelegate方法- (void)applicationWillEnterForeground:(UIApplication *)iApplication
触发本地通知并在View Controller中侦听它以触发表重新加载。
修改强>
您可以在视图控制器“UIApplicationWillEnterForegroundNotification
方法中直接注册loadView
。但请确保在视图卸载或取消分配时删除观察者。
NSNotificationCenter.defaultCenter().addObserver(
self,
selector: “applicationBecameActive:",
name: UIApplicationWillEnterForegroundNotification,
object: nil)
@objc func applicationBecameActive(notification: NSNotification){
//reload your table here
}
答案 1 :(得分:1)
您可以使用Facebook登录代表方法。如果登录成功,则重新加载tableview数据
- (void)loginButton:(FBSDKLoginButton *)loginButton didCompleteWithResult:(FBSDKLoginManagerLoginResult *)result error:(NSError *)error {
if (error) {
NSLog(@"Unexpected login error: %@", error);
NSString *alertMessage = error.userInfo[FBSDKErrorLocalizedDescriptionKey] ?: @"There was a problem logging in. Please try again later.";
NSString *alertTitle = error.userInfo[FBSDKErrorLocalizedTitleKey] ?: @"Oops";
[[[UIAlertView alloc] initWithTitle:alertTitle
message:alertMessage
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil] show];
} else {
NSLog(@"Success login and Reload Tableview data");
}
}
不要忘记设置你的Facebook按钮代理
self.loginBut.delegate=self;
答案 2 :(得分:0)
:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
if ([FBSDKAccessToken currentAccessToken]) {
//Post notification to reload after came from login
}
else {
// Try to login first
}
return [[FBSDKApplicationDelegate sharedInstance] application:application
openURL:url
sourceApplication:sourceApplication
annotation:annotation
];
}