0
我的情况是,每当我的应用程序变得活跃时,我需要同步Facebook上的一些数据。这个同步应该在后台进行,不应该锁定GUI(因此它不应该在主队列上运行)。iOS - 在GCD背景下下载Facebook数据
所以在我- applicationDidBecomeActive:
方法我有这样的代码:
dispatch_async(dispatch_get_global_queue(0,0), ^{
[[FacebookHelper sharedInstance] syncData];
});
FacebookHelper是一个单独的类,它的所有的Facebook小心处理。在FacebookHelper类中,我实现了Facebook委托方法。但由于某种原因,当我运行上面的代码时,Facebook委托方法- request:didLoad:
(当Facebook数据完成下载时)永远不会被调用。虽然如果我使用dispatch_sync
运行相同的代码,它将完成(但是然后GUI将被阻止)。
编辑:Facebook的SDK V2
可能你的背景队列被锁定了吗?由于你在队列中,你的用户界面将继续发挥作用,但是你的后台任务可能无法取得任何进展。 – nielsbot 2012-07-21 18:48:21
有可能你的后台线程在任何回调尝试之前完成 - 如果是这样的话,你需要在runloop中完成这项工作,而不仅仅是一个线程。显然,我不知道你确切的例子,但这是一个标准的问题,像在后台队列上运行网络传输一样。 – ChrisH 2012-07-21 20:03:46