处理HTTPnetworking连接变化的最佳方法

通常,在我使用相当多HTT​​P请求与服务器进行通信的iOS应用程序中,我将NSBlockOperation添加到应用程序的全局NSOperationQueue中,然后在应用程序检测到Internet连接状态更改时挂起并启用队列,从而保存当前在队列中的请求,直到队列被取消暂停。 但是,我并不完全确定,这样,当前正在运行的任何操作都将被停止,然后重新添加到队列顶部。

我的问题是:有没有更好的方法来处理networking状态的变化,当你正在使用HTTP请求到远程服务器,即暂停,恢复,取消请求等…

您可以使用Reachability类来检测networking状态何时更改以避免发送请求。 这是基于苹果提供的一些示例代码并从中更新的。 这将让你知道什么时候互联网连接改变没有轮询。

据我所知,这是检测networking可用性的最好方法。 当networking再次可用时,您会立即收到通知。 我相信它甚至会告诉你什么样的连接可用(WiFi或蜂窝)。

如果在发出请求时连接断开,则必须像现在一样处理该情况。

只是我的想法 – 你应该像这里一样向你的操作(手动)添加取消。 当您检测到networking状态更改(无连接)时,您可以取消当前操作,暂停队列,通知某个pipe理员,以便重新计划操作。 当networking可用时,恢复队列。

交易只是为了这个目的。 你需要使你的ws调用是primefaces的 ,也就是说,你启动一个事务,做你的调用,得到响应并提交事务。 那么你可以确定你的任务已经完成。

在另外一种情况下,你再次开始一个交易,让你打电话,打电话失败,无论出于何种原因你都无法得到回应,而且你将回滚你的交易并logging/报告这种情况。 你只需要确定你是否真的无法承受失踪的电话。

正如卢克所build议的那样, 苹果的样品是最好的。 但我也想解决您在networking连接中需要更改检测的问题。 这是通过观察名为kReachabilityChangedNotification的通知来处理的。

换句话说,您的视图控制器或委托代码必须具有以下部分以处理networking可达性(读取“连接性”)更改:

[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil]; 

 //Called by Reachability whenever status changes. - (void) reachabilityChanged: (NSNotification* )note { Reachability* curReach = [note object]; //TODO: Your specific handling. }