【发布时间】:2012-03-13 16:32:48
【问题描述】:
我有一个逻辑问题。我需要从另一个类访问对象的实例。
我有一个名为FacebookController 的课程。它有几个委托方法,例如fbDidLogin。首先facebookloginButtonClicked方法在用户点击按钮时被执行,经过一些内部处理,fbDidLogin方法将被调用,用户将登录到应用程序。 (所有这些都完美运行)。
现在我需要从应用程序中注销。有一个名为logout 的委托方法,我必须将其称为[facebook logout]。
我添加了一个名为-(void) logoutFacebook 的方法。当用户单击注销按钮时,将调用以下方法。注销方法如下;
-(void) logoutFacebook {
[facebook logout];
}
仅当我从同一个 viewController 注销(调用 logoutFacebook 方法)从同一个 viewController 时注销才有效。
例如,如果我在一个名为 Student 的类中,我正在尝试调用 FacebookController 的 logoutFacebook 方法。我的做法如下;
FacebookController *facebookController = [[FacebookController alloc]]init;
[facebookController logoutFacebook];
这不起作用,因为这样做会创建一个 FacebookController 的新实例。所以我需要以某种方式访问FacebookController 中的原始facebook 对象(在登录后创建)。如何访问此对象?
代码:
-(void)facebookloginButtonClicked:(id)sender{
facebook = [[Facebook alloc] initWithAppId:@"3232232" 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 {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[ facebook accessToken] forKey:@"FBAccessTokenKey"];
[defaults setObject:[ facebook expirationDate] forKey:@"FBExpirationDateKey"];
[defaults synchronize];
}
-(void) logoutFacebook {
[facebook logout];
}
【问题讨论】:
标签: objective-c ios cocoa-touch