Facebook.BC上的Facebook FBConnect fbDialogLogin方法点击FBSessionDelegate对象_sessionDelegate上的EXC_BAD_ACCESS

Max*_*eod 6 iphone facebook objective-c ios


使用facebook-facebook-ios-sdk-cf1c2c3,在我的应用程序移动到后台之前,_sessionDelegate对象正在被释放.

这意味着当应用程序在身份验证/授权回调后到达前台时,Facebook.m中的此方法命中会导致EXC_BAD_ACCESS:

- (void)fbDialogLogin:(NSString *)token expirationDate:(NSDate *)expirationDate
Run Code Online (Sandbox Code Playgroud)

该方法中的违规行是这一行:

  if ([self.sessionDelegate respondsToSelector:@selector(fbDidLogin)]) {
    [_sessionDelegate fbDidLogin];
  }
Run Code Online (Sandbox Code Playgroud)

我认为这是因为在Facebook.h中,_sessionDelegate被分配不保留.因此在某些时候它被解除分配:

@property(nonatomic, assign) id<FBSessionDelegate> sessionDelegate;
Run Code Online (Sandbox Code Playgroud)

将其更改为保留似乎可以解决问题:

@property(nonatomic, retain) id<FBSessionDelegate> sessionDelegate;
Run Code Online (Sandbox Code Playgroud)

对我来说似乎太明显了.因此我必须遗漏一些东西!

有任何想法吗?

非常感谢,xj

dav*_*com 1

在这种情况下,将委托更改为保留方法可能是比其他任何解决方案更稳定的解决方案。然而,在您希望释放委托之前,您的委托已在某个地方被释放,您可能需要研究什么会导致它提前释放。但是,如果您这样做,请确保编辑 Facebook.m dealloc() 方法以释放您的委托