我在我的应用程序中注意到,当应用程序在加载时进入后台时会导致错误,例如 "timeout" 或 "host name not found" 。
这是由于进程不允许连接在后台运行很长时间。
但是这种错误信息会影响用户体验。那么我应该怎么做才能取消交易呢?我应该取消所有连接吗?我试图在这里搜索 SO 中的问答,但找不到答案。
有关更多信息,我的应用程序使用 NSURLConnectionDelegate 方法。我有一个存储单例来管理与我的服务器的所有连接。NSURLConnection 也在自定义对象中被调用和管理。
我试图只是 [connection cancel] in - applicationDidEnterBackground: 但这会使 UI 损坏,因为我加载数据以放入 UITableViewCell 等。谁能指出解决此类问题的示例?
更新代码:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
__block UIBackgroundTaskIdentifier backgroundTask; backgroundTask =
[application beginBackgroundTaskWithExpirationHandler: ^ {
[application endBackgroundTask:backgroundTask];
backgroundTask = UIBackgroundTaskInvalid; }]; }
}
我可以把这段代码放在 appDelegate 吗?与将 beginBackgroundTaskWithExpirationHandler 放在我想在后台继续运行的任务之前和 endBackgroundTask 在该任务完成后放置相比,这样做的缺点是什么?我的代码有一个直接处理 NSURLConnection 的对象。