我正在写一个与服务器进行大量通信的应用程序。 当一个最小化应用程序时,调用didEnterBackground我断开所有连接。 恢复应用程序时,我尝试重新连接。 如果服务器可用,那就没关系,但是如果发生错误(服务器关闭),我不知道如何处理,因为我无法在AppDelegate中显示任何内容。 有关如何处理这种情况的任何建议吗?
答案 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 ,您可以设置请求超时,执行同步请求以及阻止/委派请求数据验证。