ios - iOS5 上的 Facebook SDK 导致崩溃

标签 ios facebook delegates

我正在尝试将 Facebook SDK 集成到我正在构建的 iOS5 项目中。

根据一条建议,我将 Facebook 特定文件上的编译器标志设置为“-fno-objc-arc”。这使我能够成功构建项目,同时为我的文件保留 ARC。

我已经完成并实现了基本的 Facebook SDK 步骤,并且成功登录并设置权限。当我尝试访问图表时出现问题:

[facebook requestWithGraphPath:@"me/friends" andDelegate:(id)self];

我之所以说“(id)self”而不只是“self”,是因为后者会引发错误:

warning: sending 'PhotoController *__strong' to parameter of incompatible type 'id<FBRequestDelegate>' [3]

我已经实现了所有的回调方法。唯一成功调用的方法是

- (void)requestLoading:(FBRequest *)request;

我认为应用程序在接收数据时崩溃。

根据其他线程中的建议,我打开了 NSZombie,结果如下:

2011-11-14 13:40:29.896 Friend Carousel[9660:f803] facebook: <Facebook: 0x6e21550>
2011-11-14 13:40:29.898 Friend Carousel[9660:f803] self: <PhotoController: 0x6e215a0>
2011-11-14 13:40:31.115 Friend Carousel[9660:f803] *** -[PhotoController respondsToSelector:]: message sent to deallocated instance 0x6e215a0

其中 facebook 是 facebook 对象,PhotoController 是委托(delegate)(定义了该方法)。

因此,Facebook Request 对象似乎正在尝试向已发布的委托(delegate)发送消息。正确的?这就是导致崩溃的原因?

不幸的是,这就是我的 iOS 知识让我失败的地方;这是我做错了,还是我根本无法将 Facebook SDK 合并到启用 ARC 的项目中(无需进行大量修改)?我只是不太确定从这里该去哪里。

谢谢

凯文

最佳答案

我会在这里刺一下。我的疯狂猜测是查看 PhotoController 的分配位置。如果它不保留在 ivar 中而仅提供给 Facebook 对象,那么崩溃就会有意义,因为不应保留委托(delegate)属性。换句话说,您不能依赖 Facebook 对象保留 PhotoController,因为这对于委托(delegate)对象来说是不好的做法。 (委托(delegate)应该是弱引用。)无论在哪里分配和保留 Facebook 对象,您都应该保留 PhotoController 的副本,并在 Facebook 对象的生命周期内保留它。

关于ios - iOS5 上的 Facebook SDK 导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8127172/

相关文章:

ios - AVSpeechSynthesizer 错误 AudioSession

ios - Facebook SDK 4.7 登录错误处理

c++ - SpinBoxDelegate 显示为 DoubleSpinBoxDelegate

c# - .NET 4.0 和 C# 4.0 中的事件和委托(delegate)逆变

使用 facebook 的 iOS 登录即使给出参数和权限也不会返回电子邮件

xcode - 我真的很难将数据向后传输到 UIView Controller

ios - 如何生成垂直滚动?

ios - 如何从特定位置查找字符串中字符的索引

ios - 删除 NSString 底层缓冲区的特殊问题

facebook - 如何设置facebook og :description empty?