ios5上的Facebook SDK导致崩溃

时间:2011-11-14 19:48:03

标签: 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是委托(定义了该方法)。

所以看起来Facebook Request对象正试图向已经发布的委托发送消息。对?这是导致崩溃的原因吗?

不幸的是,这是我的iOS知识让我失望的地方;这是我做错了什么,或者我根本无法将Facebook SDK整合到支持ARC的项目中(没有大量修改)?我只是不确定从哪里开始。

谢谢,

凯文

1 个答案:

答案 0 :(得分:1)

我会在这里采取刺。我的猜测是看看PhotoController的分配位置。如果它没有保留在一个ivar中并且仅仅被赋予Facebook对象,那么崩溃是有意义的,因为不应该保留委托属性。换句话说,您不能依赖于保留PhotoController的Facebook对象,因为这是委托对象的不良做法。 (委托应该是弱引用。)无论Facebook对象被分配和保留,你都应该保留一份PhotoController,并在Facebook对象的生命周期中保留它。

相关问题