gpt4 book ai didi

objective-c - 随时访问在另一个 View Controller 中创建的对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:32:50 24 4
gpt4 key购买 nike

我有逻辑问题。我需要从另一个类访问一个对象的实例。

我有一个名为 FacebookController 的类。它有几个委托(delegate)方法,例如 fbDidLogin。首先,当用户点击一个按钮时,facebookloginButtonClicked 方法被执行,经过一些内部处理后,fbDidLogin 方法将被调用,用户将登录到应用程序. (所有这一切都完美无缺)。

现在我需要退出应用程序。有一个名为 logout 的委托(delegate)方法,我必须将其称为 [facebook logout]

我添加了一个名为-(void) logoutFacebook 的方法。当用户单击注销按钮时,将调用以下方法。注销方法如下;

-(void) logoutFacebook {
[facebook logout];
}

注销只有在我从同一个 viewController 注销(调用 logoutFacebook 方法) 时才有效。

例如,如果我在名为 Student 的类(class)中,我试图调用 FacebookControllerlogoutFacebook 方法。我的做法如下;

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];
}

最佳答案

FacebookController.m 类中将此代码添加到 @implementation 之上

static FacebookController* Object;

在.h文件中添加如下函数

+ (FacebookController *) sharedInstance;       

在.m文件中实现上述功能

+ (FacebookController *) sharedInstance
{
if( Object == nil)
{
Object = [[FacebookController alloc]]init;
}

return Object;

}

现在,无论你想在何处使用 Facebook 对象,都可以像这样使用它

[FacebookController sharedInstance];

现在,在您的应用程序的整个生命周期中,您将只有一个 FacebookController 类的实例。这称为单例模式。您可以在谷歌上找到它以获取更多详细信息在上面。

引用资料:

关于objective-c - 随时访问在另一个 View Controller 中创建的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9688101/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com