【问题标题】:Accessing an object created in another view controller at any time随时访问在另一个视图控制器中创建的对象
【发布时间】:2012-03-13 16:32:48
【问题描述】:

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

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

现在我需要从应用程序中注销。有一个名为logout 的委托方法,我必须将其称为[facebook logout]

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

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

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

例如,如果我在一个名为 Student 的类中,我正在尝试调用 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];    
    }

【问题讨论】:

    标签: objective-c ios cocoa-touch


    【解决方案1】:

    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 类实例。这称为单例模式。您可以在 google 上找到它以获取更多详细信息。

    参考资料:

    【讨论】:

    • 非常感谢您的回复。我会谷歌它。有什么好的教程推荐吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多