如何正确处理重新连接到应用程序中的服务器

时间:2013-12-18 14:46:17

标签: ios iphone ipad

我正在写一个与服务器进行大量通信的应用程序。 当一个最小化应用程序时,调用didEnterBackground我断开所有连接。 恢复应用程序时,我尝试重新连接。 如果服务器可用,那就没关系,但是如果发生错误(服务器关闭),我不知道如何处理,因为我无法在AppDelegate中显示任何内容。 有关如何处理这种情况的任何建议吗?

4 个答案:

答案 0 :(得分:1)

如果您希望通知用户,可以考虑使用NSNotificationCenter发布失败消息,然后您可以从其他位置回复这些消息吗?

答案 1 :(得分:1)

当然可以。 UIAlertView可以在任何地方创建和显示。应用程序委托也可以访问应用程序window(以及根视图控制器),以便它可以注入视图。

请注意,我并不是说在app委托中使用此功能是正确的,因为它不是。您应该有一个处理此问题的网络控制器/监视器。

答案 2 :(得分:1)

像这样使用NotificationCenter:

在AppDelegate中:

- (void)applicationWillEnterForeground:(UIApplication *)application
{
[[NSNotificationCenter defaultCenter]
 postNotificationName:@"reconnectToServer"
 object:self];
}

在didLoad-Method中:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(reconnectToServer:)
                                             name:@"reconnectToServer"
                                           object:nil];

如果您的应用再次有效,则调用添加方法

- (void) reconnectToServer:(NSNotification *) notification{
  // Got to to a ViewController...
  ViewController *vc =[self.storyboard instantiateViewControllerWithIdentifier:@"ViewController"];
  [self presentViewController:vc animated:YES completion:nil];
}

答案 3 :(得分:0)

许多事情可以帮助您检查服务器验证。 如果服务器关闭,您几秒钟内就不会收到任何数据。这可能是用户的错误。 如果服务器可能关闭,你可以使用某种" ping"第一。如果没问题,请获取数据,如果没有显示服务器无法访问。 如果您使用iOS API,如 NSURLConnection NSURLRequest NSURLResponse ,您可以设置请求超时,执行同步请求以及阻止/委派请求数据验证。