facebook ios sdk日志:奇怪的消息

时间:2012-08-12 17:27:43

标签: ios facebook

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

  

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

有什么想法吗?

4 个答案:

答案 0 :(得分:5)

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

如果您使用没有弃用标头的SDK(即Facebook.h),这不应该是一个问题。但是要使用本机对话框,您需要包含已弃用的标题(来源: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 not working

重建SDK

答案 1 :(得分:2)

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

我保持实际应用初始化和accessstoken的实例与调用对话框的实例不同。当我在经过documentation之后纠正了它,它就解决了。

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];

答案 2 :(得分:1)

在分配accessToken和expirationDate之前快速注销,这将有助于清除您看到的一些令人讨厌的错误。我确信这只是那些使用已弃用的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;

答案 3 :(得分:0)

当我的Facebook对象被解除分配时,我看到此消息。我正在使用3.0.8 SDK。在我的情况下,我认为Facebook对象应该删除自己作为其tokenCaching的观察者,然后在其dealloc中释放它。您的情况可能会有所不同,因为它听起来不像是要清除FB对象。也许建议here会有所帮助。