2011-11-14 82 views
0

我正在尝试将Facebook SDK集成到我正在构建的iOS5项目中。ios5上的Facebook SDK导致崩溃

遵循一条建议,我将Facebook特定文件上的编译器标志设置为'-fno-objc-arc'。这允许我成功构建项目,同时保留我的文件的ARC。

我已经通过并实施了基本的Facebook SDK步骤,并且它已成功登录并设置权限。问题是当我试图访问图表:

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

我说的,而不只是“自我”“(ID)自我”是后者的原因抛出我的错误:

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

我会在这里采取了刺。我疯狂的猜测是看看PhotoController的分配位置。如果它不保留在伊娃里,而只是交给Facebook对象,那么它就会崩溃,因为委托属性不应被保留。换句话说,你不能依赖于保留PhotoController的Facebook对象,因为这对委托对象来说是不好的做法。 (代表应该是弱引用。)在Facebook对象被分配和保留的地方,你应该保留一个PhotoController的副本,并在Facebook对象的生命周期中保留它。

+0

Cliff,Facebook对象正在PhotoController中创建。 PhotoController应该自己创建一个副本吗?我不完全明白。 PhotoController在RootViewController中是这样创建的:PhotoController * photoController = [[PhotoController alloc] init]; – thekevinscott

+0

明白了,就是这样! – thekevinscott

+0

Uuhh ...我希望/假设我的回答有帮助?我看到你标记我是正确的。从你上面的评论来看,我假装你将它实例化为方法中的局部变量,然后释放它导致你的崩溃,并且我还假设你已经修改了将图片控制器存储在属性或ivar中的方法?无论如何,我很高兴你解决了它! :) – Cliff