我正在尝试启动UIbarbuttonItem来登录/注销Facebook。我可以登录确定但无法注销,UIBarbuttonItem标题不会更改或发起注销过程。
以下是一些代码:
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(sessionStateChanged:)
name:FBSessionStateChangedNotification
object:nil];
NSLog(@"Session changed");
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate openSessionWithAllowLoginUI:NO];
[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(sessionStateChanged:) userInfo:nil repeats:NO];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willBeginBannerViewActionNotification:) name:BannerViewActionWillBegin object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didFinishBannerViewActionNotification:) name:BannerViewActionDidFinish object:nil];
}
- (IBAction)authButtonAction:(id)sender {
NSLog(@"session open");
AppDelegate *appDelegate = (AppDelegate*)
[[UIApplication sharedApplication] delegate];
// If the user is authenticated, log out when the button is clicked.
// If the user is not authenticated, log in when the button is clicked.
if (FBSession.activeSession.isOpen) {
[appDelegate closeSession];
} else {
// The user has initiated a login, so call the openSession method
// and show the login UX if necessary.
[appDelegate openSessionWithAllowLoginUI:YES];
}
}
- (void)sessionStateChanged:(NSNotification*)notification {
NSLog(@"Login Activated");
self.navigationItem.leftBarButtonItem = authButton;
if (FBSession.activeSession.isOpen) {
self.authButton =[[UIBarButtonItem alloc] initWithTitle:@"Login" style:UIBarButtonItemStyleBordered target:self action:@selector(sessionStateChanged:)];
}else{
self.authButton =[[UIBarButtonItem alloc] initWithTitle:@"Logout" style:UIBarButtonItemStyleBordered target:self action:@selector(sessionStateChanged:)];
}
}
日志报告:
2013-03-18 23:05:58.739 prompT[4056:907] Session changed
2013-03-18 23:05:58.760 prompT[4056:907]
fb sdk error = (null)
2013-03-18 23:05:58.763 prompT[4056:907] User session found
2013-03-18 23:05:58.765 prompT[4056:907] Login Activated
2013-03-18 23:05:59.268 prompT[4056:907] Login Activated
2013-03-18 23:06:00.872 prompT[4056:907] AdAbanner failed
2013-03-18 23:06:01.664 prompT[4056:907] Login Activated
我也使用故事板。有什么想法和帮助吗?
答案 0 :(得分:1)
你sessionStateChanged
方法有一些错误,这里有一些评论
- (void)sessionStateChanged:(NSNotification*)notification {
NSLog(@"Login Activated");
self.navigationItem.leftBarButtonItem = authButton;
//what is this assignment doing? What is authButton? An iVar?
if (FBSession.activeSession.isOpen) {
self.authButton =[[UIBarButtonItem alloc] initWithTitle:@"Login" style:UIBarButtonItemStyleBordered target:self action:@selector(sessionStateChanged:)];
//self.authButton is not the same entity as authButton.
//did you intend to set authButton here and then
//assign it to self.navigationItem.leftBarButtonItem after the conditional?
}else{
self.authButton =[[UIBarButtonItem alloc] initWithTitle:@"Logout"
style:UIBarButtonItemStyleBordered
target:self action:@selector(sessionStateChanged:)];
//is this really the action you want, or is it rather `authButtonAction`?
}
您要做的就是更改按钮的标题:
- (void)sessionStateChanged:(NSNotification*)notification {
NSString* buttonTitle = @"Login";
if (FBSession.activeSession.isOpen) {
buttonTitle = @"Logout";
}
self.navigationItem.leftBarButtonItem.title = buttonTitle;
}
您之前应该在viewDidLoad或storyboard中分配,初始化并放置leftBarButtonItem。当你这样做时,你应该正确地连接IBAction。
代码版本......
- (void) viewDidLoad {
[super viewDidLoad];
UIBarButtonItem* barButton =
[[UIBarButtonItem alloc] initWithTitle:@"login"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(authButtonAction:)];
self.navigationItem.leftBarButtonItem = barButton;
}