5

我有一个共享图像的按钮,每次单击它时,我都会在日志中收到此消息,我不明白:

2012-08-12 19:21:30.511 AvisOcean[2239:707] 类 FBSessionManualTokenCachingStrategy 的实例 0xe6b8fe0 已被释放,而键值观察者仍向其注册。观察信息被泄露,甚至可能被错误地附加到其他对象上。在 NSKVODeallocateBreak 上设置断点以在调试器中停止。这是当前的观察信息:(上下文:0xa5e90,属性:0x245310> 上下文:0xa5e90,属性:0x28c400>)

有任何想法吗?

4

4 回答 4

5

Facebook SDK 正在泄露观察者。我正在使用 SDK v3.1。

如果您使用没有弃用标头(即 Facebook.h)的 SDK,这应该不是问题。但是要使用本机对话框,您需要包含已弃用的标头(来源:https ://developers.facebook.com/docs/howtos/feed-dialog-using-ios-sdk/ ),这会在关闭/清理时导致此错误活动会话。

这是修复它的拉取请求:https ://github.com/facebook/facebook-ios-sdk/pull/474

然后,您可以使用Facebook SDK for iOS6/Xcode 4.5 重建 SDK 不起作用

于 2012-09-29T15:32:01.287 回答
2

我遇到了同样的问题。我认为发生的事情是我在其他地方初始化了 Facebook,当我尝试重新初始化它并再次从另一个实例调用对话框委托时,它给了我错误。

我保持实际应用程序初始化和访问令牌的实例与调用对话框的实例不同。当我在查看文档后更正该问题时,它就解决了。

if (nil == self.facebook) {
    self.facebook = [[Facebook alloc]
                     initWithAppId:FBSession.activeSession.appID
                     andDelegate:nil];

    // Store the Facebook session information
    self.facebook.accessToken = FBSession.activeSession.accessToken;      
    self.facebook.expirationDate = FBSession.activeSession.expirationDate;
}

[self.facebook dialog:@"feed" andParams:params andDelegate:self];
于 2012-09-20T18:17:42.263 回答
1

在分配 accessToken 和 expireDate 之前快速注销,这将有助于清理您看到的一些令人讨厌的错误。我敢肯定,对于那些使用已弃用的 Facebook 标头的人来说,这只是一个临时解决方案。

// Initiate a Facebook instance
if(!_facebook)
    _facebook = [[Facebook alloc] initWithAppId:FBSession.activeSession.appID andDelegate:nil];

// Store the Facebook session information
[_facebook logout];
_facebook.accessToken = FBSession.activeSession.accessToken;
_facebook.expirationDate = FBSession.activeSession.expirationDate;
于 2012-10-05T16:44:44.547 回答
0

当我的 Facebook 对象被解除分配时,我会看到此消息。我正在使用 3.0.8 SDK。在我的情况下,我认为 Facebook 对象应该在将其释放到其 dealloc 之前将其自身作为其 tokenCaching 的观察者移除。您的情况可能会有所不同,因为听起来您不会清除 FB 对象。也许这里的建议会有所帮助。

于 2012-09-10T16:36:18.677 回答