【问题标题】:facebook ios sdk log : strange messagefacebook ios sdk 日志:奇怪的消息
【发布时间】:2012-08-12 17:27:42
【问题描述】:

我有一个分享图片的按钮,每次点击它,我都会在日志中看到这条消息,我不明白:

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

有什么想法吗?

【问题讨论】:

    标签: ios facebook


    【解决方案1】:

    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 not working 重新构建 SDK

    【讨论】:

    • 感谢您的回答。绝对有帮助。还能够通过自己构建 FB SDK 来注销另一个令人讨厌的错误。
    【解决方案2】:

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

    我保持实际应用程序初始化和访问令牌的实例与调用对话框的实例不同。当我在检查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];
    

    【讨论】:

    • 如果这不是 ARC,您在 self.facebook 上有一个额外的保留。您需要使用facebook=..._facebook=... 进行分配/初始化。在已经保留的属性上使用 self 来分配/初始化对象会保留它两次。
    【解决方案3】:

    在分配 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;
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2012-11-21
        • 1970-01-01
        • 2016-01-21
        • 1970-01-01
        • 1970-01-01
        • 2011-12-17
        • 2010-12-04
        • 2014-08-30
        • 2014-10-17
        相关资源
        最近更新 更多