Objective-C中的私有方法

时间:2012-09-11 05:40:27

标签: objective-c ios facebook

我正在尝试实施facebook登录并注销。在其中一个步骤(https://developers.facebook.com/docs/howtos/login-with-facebook-using-ios-sdk/)中,它需要一个私有方法“sessionStateChanged:”才能准确。我试图这样做,但由于某种原因我收到错误“类型名称需要说明符或限定符”。显然我错过了一些东西。如果有人可以指出,这将是伟大的! 这就是我想要实现的私有方法:

- (void)sessionStateChanged:(NSNotification*)notification {
    if (FBSession.activeSession.isOpen) {
        [self.authButton setTitle:@"Logout" forState:UIControlStateNormal];
    } else {
        [self.authButton setTitle:@"Login" forState:UIControlStateNormal];
    }
}

以下是我尝试实施的方法:

//  AppDelegate.m

#import "AppDelegate.h"
#import <FacebookSDK/FacebookSDK.h>
#import "ViewController.h"

@interface PrivateClass
{
    -(void)sessionStateChanged:(NSNotification*)notification;
}
@end

    @implementation AppDelegate //implementation begins no suprises here...
    .
    .
    .
    .
    //and at the end of the implementation I put the method as
    - (void)sessionStateChanged:(NSNotification*)notification {
        if (FBSession.activeSession.isOpen) {
            [self.authButton setTitle:@"Logout" forState:UIControlStateNormal];
        } else {
            [self.authButton setTitle:@"Login" forState:UIControlStateNormal];
        }
    }

    @end

感谢您花时间看我的问题。

3 个答案:

答案 0 :(得分:1)

您需要在大括号之外声明您的方法,如下所示:

@interface PrivateClass
{
}

-(void)sessionStateChanged:(NSNotification*)notification;

@end

答案 1 :(得分:0)

私有方法就是这样,Object-C的“类别”概念:

@interface PrivateClass()
    -(void)sessionStateChanged:(NSNotification*)notification;
@end

答案 2 :(得分:0)

  1. Objective-C

  2. 中没有私有类或私有方法
  3. 根本不需要类声明来解决这个问题

  4. 只需按照您的方式实施该方法,它就会“正常工作”

  5. 出于组织的考虑,一些人(包括我自己)将在.m的顶部的类扩展中声明在.m文件之外不可见的任何方法:

    @interface AppDelegate()   - (无效)sessionStateChanged:(NSNotification *)通知;  @end

    @implementation AppDelegate  ...  @end

  6. 虽然您可以在Objective-C(没有超类的类)中创建新的根类,但您实际上无法创建与系统API(使用Foundation或更高版本)互操作的新根类。至少不是没有重新发明大量的基金会。