sha*_*jem 2 cocoa-touch objective-c ios
我有一个逻辑问题.我需要从另一个类访问一个对象的实例.
我有一个叫做的课FacebookController.例如,它有几个委托方法fbDidLogin.首先,facebookloginButtonClicked当用户点击按钮时执行该方法,并且在一些内部处理之后,fbDidLogin将调用该方法,并且用户将登录到该应用程序.(所有这一切都很完美).
现在我需要从应用程序注销.有一个名为的委托方法logout,我必须将其称为[facebook logout].
我添加了一个名为的方法-(void) logoutFacebook.当用户单击注销按钮时,将调用以下方法.注销方法如下;
-(void) logoutFacebook {
[facebook logout];
}
Run Code Online (Sandbox Code Playgroud)
仅当我从同一个viewController注销(调用logoutFacebook方法)时,注销才有效.
例如,如果我在一个被调用的类中Student,我试图调用该logoutFacebook方法FacebookController.我的方法如下;
FacebookController *facebookController = [[FacebookController alloc]]init;
[facebookController logoutFacebook];
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为通过这样做,它将创建一个新的实例FacebookController.所以我需要以某种方式访问原始facebook对象FacebookController(在登录后创建).如何访问此对象?
代码:
-(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];
}
Run Code Online (Sandbox Code Playgroud)
在FacebookController.m类中添加@implementation上面的代码
static FacebookController* Object;
Run Code Online (Sandbox Code Playgroud)
将以下函数添加到.h文件中
+ (FacebookController *) sharedInstance
Run Code Online (Sandbox Code Playgroud)
在.m文件中实现上述功能
+ (FacebookController *) sharedInstance
{
if( Object == nil)
{
Object = [[FacebookController alloc]]init;
}
return Object;
}
Run Code Online (Sandbox Code Playgroud)
现在,无论你想在哪里使用Facebook对象,都可以这样使用它
[FacebookController sharedInstance];
Run Code Online (Sandbox Code Playgroud)
现在你FacebookController的应用程序的整个生命周期中只有一个类实例.这就是所谓的单例模式 ..你可以找到google来获取更多细节.
| 归档时间: |
|
| 查看次数: |
811 次 |
| 最近记录: |