我有一个共享图像的按钮,每次点击它,我都会在日志中收到此消息,我不明白:
2012-08-12 19:21:30.511 AvisOcean [2239:707] FBSessionManualTokenCachingStrategy类的实例0xe6b8fe0已取消分配,而键值观察者仍在其中注册。观察信息被泄露,甚至可能被错误地附加到其他物体上。在NSKVODeallocateBreak上设置断点以在调试器中停止。这是目前的观察信息: ( 上下文:0xa5e90,属性:0x245310> 上下文:0xa5e90,属性:0x28c400> )
有什么想法吗?
答案 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
重建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会有所帮助。