2

在我的项目中添加了 Sharekit 组,并获得了如此多的编译警告。

在这种情况下,它是一个静态实例,并且在静态方法中传递 self 参数是不正确的,因为在静态方法中没有此对象的特定实例。我该如何解决这个问题。

 + (void)logout
{
FBSession *fbSession; 

if(!SHKFacebookUseSessionProxy){
    fbSession = [FBSession sessionForApplication:SHKFacebookKey
                                             secret:SHKFacebookSecret
                                           delegate:self];

}else {
    fbSession = [FBSession sessionForApplication:SHKFacebookKey
                                    getSessionProxy:SHKFacebookSessionProxyURL
                                          delegate:self];
                  //delegate:[self sharedSomeProtocolDelegate]];
}

[fbSession logout];
}

请任何人。

谢谢

4

2 回答 2

1

做一个符合 FBSessionDelegate 协议的 SocialManager 对象。实例化它并在代码中给出而不是 self 参数。例如:

社会管理器.h:

 @interface SocialManager : NSObject <FBSessionDelegate>
- (id) init;
/**
 * Called when the user successfully logged in.
 */
- (void)fbDidLogin;

/**
 * Called when the user dismissed the dialog without logging in.
 */
- (void)fbDidNotLogin:(BOOL)cancelled;

/**
 * Called when the user logged out.
 */
- (void)fbDidLogout;
@end

社会管理器.m:

-(id) init
{
  self = [super init];
  return self;
}
- (void)fbDidLogin;
{
}
- (void)fbDidNotLogin:(BOOL)cancelled;
{
}
- (void)fbDidLogout
{
}

并在您的代码中:

 + (void)logout
{
FBSession *fbSession;
SocialManager* socialManager = [[SocialManager alloc] init];

if(!SHKFacebookUseSessionProxy){
    fbSession = [FBSession sessionForApplication:SHKFacebookKey
                                             secret:SHKFacebookSecret
                                           delegate:socialManager];

}else {
    fbSession = [FBSession sessionForApplication:SHKFacebookKey
                                    getSessionProxy:SHKFacebookSessionProxyURL
                                          delegate:socialManager];
                  //delegate:[self sharedSomeProtocolDelegate]];
}

[fbSession logout];
}

这是一个简单的示例,但您必须在代码中实现自己的委托。只需将协议中的对象(可能是 viewController)添加到您的对象中,并将该对象设置为 FBsession 的委托。

于 2012-09-19T19:41:22.177 回答
1

使用静态类时,您可以在这种情况下手动获取警告:

...
delegate:(id<FBSessionDelegate>)self];
于 2013-08-19T14:05:01.530 回答