我目前正在将我的应用从使用ASIHTTPRequest迁移到AFNetworking。我知道如果可能的话,应避免同步请求,但在我的应用程序中,我只有一个地方,我使用一个。在app delegate applicationDidEnterBackground()方法中,我需要运行HTTP请求来查询数据,以便在应用程序转到后台时设置应用程序徽章编号。当异步运行时,这很少起作用,因为该方法刚刚退出,并且在HTTP请求完成之前应用程序被挂起。使用ASIHTTPRequest我使用[request startSynchronous]方法,这意味着HTTP请求每次都完成100%并且徽章已正确更新。我看到AFNetworking没有明显的同步选项,那么有人可以提出一种可以同步使用的方法,或者替代解决方案吗?
答案 0 :(得分:7)
已经找到了这样做的方法 - 使用其中一个AFHTTPRequestOperation派生词有方法 - setShouldExecuteAsBackgroundTaskWithExpirationHandler:它为操作系统暂停应用程序之前的操作提供了额外的时间。所以我的代码是:
[operation setShouldExecuteAsBackgroundTaskWithExpirationHandler:nil];
[operation start];
这正是我所需要的并解决了我的问题。
乔纳森
更新:正如Bob指出的那样,使用这种方法实际上并不是同步执行操作,但在没有同步方法的情况下,这是我理想的解决方案。