我发布的用户Facebook墙上的代码类似于:
[appDelegate.facebook requestWithGraphPath:@"me/feed"
andParams:params
andHttpMethod:@"POST"
andDelegate:self];
如果我在请求完成之前解除了托管UIViewController,那么当请求确实完成时我会崩溃,因为代理已经被解除了。
有什么方法可以解决这个问题吗?我真的不想像我的appDelegate那样创建一个高级对象的FB委托,这看起来很傻。
我在这里面对的问题有一个很好的描述:https://github.com/facebook/facebook-ios-sdk/issues/220
答案 0 :(得分:0)
在控制器的dealloc方法中,将Facebook对象的委托设置为nil。在你的情况下,这将是这样的:
- (void)dealloc {
appDelegate.facebook.sessionDelegate = nil;
[super dealloc];
}
当请求完成时,将在nil对象上调用委托方法,该对象将以静默方式吞下该消息。
这是一个很好的习惯,可以在任何时候将self
设置为任何对象的委托。